PHP 8.3.27
Preview: hpke.h Size: 6.82 KB
//usr/include/openssl/hpke.h
/*
 * Copyright 2022-2024 The OpenSSL Project Authors. All Rights Reserved.
 *
 * Licensed under the Apache License 2.0 (the "License").  You may not use
 * this file except in compliance with the License.  You can obtain a copy
 * in the file LICENSE in the source distribution or at
 * https://www.openssl.org/source/license.html
 */

/* APIs and data structures for HPKE (RFC9180)  */
#ifndef OSSL_HPKE_H
# define OSSL_HPKE_H
# pragma once

# include <openssl/types.h>

/* HPKE modes */
# define OSSL_HPKE_MODE_BASE              0 /* Base mode  */
# define OSSL_HPKE_MODE_PSK               1 /* Pre-shared key mode */
# define OSSL_HPKE_MODE_AUTH              2 /* Authenticated mode */
# define OSSL_HPKE_MODE_PSKAUTH           3 /* PSK+authenticated mode */

/*
 * Max for ikm, psk, pskid, info and exporter contexts.
 * RFC9180, section 7.2.1 RECOMMENDS 64 octets but we have test vectors from
 * Appendix A.6.1 with a 66 octet IKM so we'll allow that.
 */
# define OSSL_HPKE_MAX_PARMLEN        66
# define OSSL_HPKE_MIN_PSKLEN         32
# define OSSL_HPKE_MAX_INFOLEN        1024

/*
 * The (16bit) HPKE algorithm ID IANA codepoints
 * If/when new IANA codepoints are added there are tables in
 * crypto/hpke/hpke_util.c that must also be updated.
 */
# define OSSL_HPKE_KEM_ID_RESERVED         0x0000 /* not used */
# define OSSL_HPKE_KEM_ID_P256             0x0010 /* NIST P-256 */
# define OSSL_HPKE_KEM_ID_P384             0x0011 /* NIST P-384 */
# define OSSL_HPKE_KEM_ID_P521             0x0012 /* NIST P-521 */
# define OSSL_HPKE_KEM_ID_X25519           0x0020 /* Curve25519 */
# define OSSL_HPKE_KEM_ID_X448             0x0021 /* Curve448 */

# define OSSL_HPKE_KDF_ID_RESERVED         0x0000 /* not used */
# define OSSL_HPKE_KDF_ID_HKDF_SHA256      0x0001 /* HKDF-SHA256 */
# define OSSL_HPKE_KDF_ID_HKDF_SHA384      0x0002 /* HKDF-SHA384 */
# define OSSL_HPKE_KDF_ID_HKDF_SHA512      0x0003 /* HKDF-SHA512 */

# define OSSL_HPKE_AEAD_ID_RESERVED        0x0000 /* not used */
# define OSSL_HPKE_AEAD_ID_AES_GCM_128     0x0001 /* AES-GCM-128 */
# define OSSL_HPKE_AEAD_ID_AES_GCM_256     0x0002 /* AES-GCM-256 */
# define OSSL_HPKE_AEAD_ID_CHACHA_POLY1305 0x0003 /* Chacha20-Poly1305 */
# define OSSL_HPKE_AEAD_ID_EXPORTONLY      0xFFFF /* export-only fake ID */

/* strings for suite components */
# define OSSL_HPKE_KEMSTR_P256        "P-256"              /* KEM id 0x10 */
# define OSSL_HPKE_KEMSTR_P384        "P-384"              /* KEM id 0x11 */
# define OSSL_HPKE_KEMSTR_P521        "P-521"              /* KEM id 0x12 */
# define OSSL_HPKE_KEMSTR_X25519      "X25519"             /* KEM id 0x20 */
# define OSSL_HPKE_KEMSTR_X448        "X448"               /* KEM id 0x21 */
# define OSSL_HPKE_KDFSTR_256         "hkdf-sha256"        /* KDF id 1 */
# define OSSL_HPKE_KDFSTR_384         "hkdf-sha384"        /* KDF id 2 */
# define OSSL_HPKE_KDFSTR_512         "hkdf-sha512"        /* KDF id 3 */
# define OSSL_HPKE_AEADSTR_AES128GCM  "aes-128-gcm"        /* AEAD id 1 */
# define OSSL_HPKE_AEADSTR_AES256GCM  "aes-256-gcm"        /* AEAD id 2 */
# define OSSL_HPKE_AEADSTR_CP         "chacha20-poly1305"  /* AEAD id 3 */
# define OSSL_HPKE_AEADSTR_EXP        "exporter"           /* AEAD id 0xff */

/*
 * Roles for use in creating an OSSL_HPKE_CTX, most
 * important use of this is to control nonce re-use.
 */
# define OSSL_HPKE_ROLE_SENDER 0
# define OSSL_HPKE_ROLE_RECEIVER 1

# ifdef  __cplusplus
extern "C" {
# endif

typedef struct {
    uint16_t    kem_id; /* Key Encapsulation Method id */
    uint16_t    kdf_id; /* Key Derivation Function id */
    uint16_t    aead_id; /* AEAD alg id */
} OSSL_HPKE_SUITE;

/**
 * Suite constants, use this like:
 *          OSSL_HPKE_SUITE myvar = OSSL_HPKE_SUITE_DEFAULT;
 */
# ifndef OPENSSL_NO_ECX
#  define OSSL_HPKE_SUITE_DEFAULT \
    {\
        OSSL_HPKE_KEM_ID_X25519, \
        OSSL_HPKE_KDF_ID_HKDF_SHA256, \
        OSSL_HPKE_AEAD_ID_AES_GCM_128 \
    }
# else
#  define OSSL_HPKE_SUITE_DEFAULT \
    {\
        OSSL_HPKE_KEM_ID_P256, \
        OSSL_HPKE_KDF_ID_HKDF_SHA256, \
        OSSL_HPKE_AEAD_ID_AES_GCM_128 \
    }
#endif

typedef struct ossl_hpke_ctx_st OSSL_HPKE_CTX;

OSSL_HPKE_CTX *OSSL_HPKE_CTX_new(int mode, OSSL_HPKE_SUITE suite, int role,
                                 OSSL_LIB_CTX *libctx, const char *propq);
void OSSL_HPKE_CTX_free(OSSL_HPKE_CTX *ctx);

int OSSL_HPKE_encap(OSSL_HPKE_CTX *ctx,
                    unsigned char *enc, size_t *enclen,
                    const unsigned char *pub, size_t publen,
                    const unsigned char *info, size_t infolen);
int OSSL_HPKE_seal(OSSL_HPKE_CTX *ctx,
                   unsigned char *ct, size_t *ctlen,
                   const unsigned char *aad, size_t aadlen,
                   const unsigned char *pt, size_t ptlen);

int OSSL_HPKE_keygen(OSSL_HPKE_SUITE suite,
                     unsigned char *pub, size_t *publen, EVP_PKEY **priv,
                     const unsigned char *ikm, size_t ikmlen,
                     OSSL_LIB_CTX *libctx, const char *propq);
int OSSL_HPKE_decap(OSSL_HPKE_CTX *ctx,
                    const unsigned char *enc, size_t enclen,
                    EVP_PKEY *recippriv,
                    const unsigned char *info, size_t infolen);
int OSSL_HPKE_open(OSSL_HPKE_CTX *ctx,
                   unsigned char *pt, size_t *ptlen,
                   const unsigned char *aad, size_t aadlen,
                   const unsigned char *ct, size_t ctlen);

int OSSL_HPKE_export(OSSL_HPKE_CTX *ctx,
                     unsigned char *secret,
                     size_t secretlen,
                     const unsigned char *label,
                     size_t labellen);

int OSSL_HPKE_CTX_set1_authpriv(OSSL_HPKE_CTX *ctx, EVP_PKEY *priv);
int OSSL_HPKE_CTX_set1_authpub(OSSL_HPKE_CTX *ctx,
                               const unsigned char *pub,
                               size_t publen);
int OSSL_HPKE_CTX_set1_psk(OSSL_HPKE_CTX *ctx,
                           const char *pskid,
                           const unsigned char *psk, size_t psklen);

int OSSL_HPKE_CTX_set1_ikme(OSSL_HPKE_CTX *ctx,
                            const unsigned char *ikme, size_t ikmelen);

int OSSL_HPKE_CTX_set_seq(OSSL_HPKE_CTX *ctx, uint64_t seq);
int OSSL_HPKE_CTX_get_seq(OSSL_HPKE_CTX *ctx, uint64_t *seq);

int OSSL_HPKE_suite_check(OSSL_HPKE_SUITE suite);
int OSSL_HPKE_get_grease_value(const OSSL_HPKE_SUITE *suite_in,
                               OSSL_HPKE_SUITE *suite,
                               unsigned char *enc, size_t *enclen,
                               unsigned char *ct, size_t ctlen,
                               OSSL_LIB_CTX *libctx, const char *propq);
int OSSL_HPKE_str2suite(const char *str, OSSL_HPKE_SUITE *suite);
size_t OSSL_HPKE_get_ciphertext_size(OSSL_HPKE_SUITE suite, size_t clearlen);
size_t OSSL_HPKE_get_public_encap_size(OSSL_HPKE_SUITE suite);
size_t OSSL_HPKE_get_recommended_ikmelen(OSSL_HPKE_SUITE suite);

# ifdef  __cplusplus
}
# endif

#endif

Directory Contents

Dirs: 0 × Files: 141
Name Size Perms Modified Actions
3.66 KB lrw-r--r-- 2025-02-11 16:56:20
Edit Download
59.68 KB lrw-r--r-- 2025-02-11 16:56:20
Edit Download
7.55 KB lrw-r--r-- 2025-02-11 16:56:20
Edit Download
35.09 KB lrw-r--r-- 2025-02-11 16:56:20
Edit Download
398 B lrw-r--r-- 2025-02-11 16:56:20
Edit Download
3.42 KB lrw-r--r-- 2025-02-11 16:56:20
Edit Download
842 B lrw-r--r-- 2025-02-11 16:56:20
Edit Download
44.29 KB lrw-r--r-- 2025-02-11 16:56:20
Edit Download
3.43 KB lrw-r--r-- 2025-02-11 16:56:20
Edit Download
2.63 KB lrw-r--r-- 2025-02-11 16:56:20
Edit Download
23.62 KB lrw-r--r-- 2025-02-11 16:56:20
Edit Download
1.90 KB lrw-r--r-- 2025-02-11 16:56:20
Edit Download
1.62 KB lrw-r--r-- 2025-02-11 16:56:20
Edit Download
594 B lrw-r--r-- 2025-02-11 16:56:20
Edit Download
4.95 KB lrw-r--r-- 2025-02-11 16:56:20
Edit Download
2.02 KB lrw-r--r-- 2025-02-11 16:56:20
Edit Download
1.57 KB lrw-r--r-- 2025-02-11 16:56:20
Edit Download
41.79 KB lrw-r--r-- 2025-02-11 16:56:20
Edit Download
6.27 KB lrw-r--r-- 2025-02-11 16:56:20
Edit Download
1.70 KB lrw-r--r-- 2025-02-11 16:56:20
Edit Download
34.25 KB lrw-r--r-- 2025-02-11 16:56:20
Edit Download
6.57 KB lrw-r--r-- 2025-02-11 16:56:20
Edit Download
1.63 KB lrw-r--r-- 2025-02-11 16:56:20
Edit Download
1.22 KB lrw-r--r-- 2025-02-11 16:56:20
Edit Download
10.29 KB lrw-r--r-- 2025-02-11 16:56:20
Edit Download
2.21 KB lrw-r--r-- 2025-02-11 16:56:20
Edit Download
3.63 KB lrw-r--r-- 2025-02-11 16:56:48
Edit Download
1.55 KB lrw-r--r-- 2025-02-11 16:56:48
Edit Download
1.16 KB lrw-r--r-- 2025-02-11 16:56:20
Edit Download
1.39 KB lrw-r--r-- 2025-02-11 16:56:20
Edit Download
7.99 KB lrw-r--r-- 2025-02-11 16:56:20
Edit Download
48.97 KB lrw-r--r-- 2025-02-11 16:56:20
Edit Download
23.10 KB lrw-r--r-- 2025-02-11 16:56:20
Edit Download
1.10 KB lrw-r--r-- 2025-02-11 16:56:20
Edit Download
14.39 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
1.96 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
23.61 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
2.41 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
78.51 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
22.18 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
1.65 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
5.63 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
791 B lrw-r--r-- 2025-02-11 16:56:21
Edit Download
8.33 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
14.99 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
2.51 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
12.24 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
1.59 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
1.43 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
1.02 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
66.84 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
361 B lrw-r--r-- 2025-02-11 16:56:21
Edit Download
361 B lrw-r--r-- 2025-02-11 16:56:21
Edit Download
5.28 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
5.32 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
791 B lrw-r--r-- 2025-02-11 16:56:21
Edit Download
37.91 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
2.77 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
21.71 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
8.76 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
1.12 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
102.50 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
7.36 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
8.62 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
1.16 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
601 B lrw-r--r-- 2025-02-11 16:56:21
Edit Download
1010 B lrw-r--r-- 2025-02-11 16:56:21
Edit Download
2.43 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
2.09 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
6.82 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
5.23 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
2.39 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
2.94 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
5.65 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
482 B lrw-r--r-- 2025-02-11 16:56:21
Edit Download
14.25 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
10.49 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
1.43 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
1.66 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
1.66 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
1.41 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
10.53 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
6.69 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
782 B lrw-r--r-- 2025-02-11 16:56:21
Edit Download
237.79 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
28.66 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
2.15 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
515 B lrw-r--r-- 2025-02-11 16:56:48
Edit Download
3.11 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
562 B lrw-r--r-- 2025-02-11 16:56:21
Edit Download
7.16 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
2.74 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
25.26 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
531 B lrw-r--r-- 2025-02-11 16:56:21
Edit Download
2.57 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
22.13 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
2.88 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
19.70 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
1.85 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
8.33 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
2.67 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
1.11 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
849 B lrw-r--r-- 2025-02-11 16:56:21
Edit Download
3.89 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
3.24 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
2.33 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
1.17 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
2.79 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
1.68 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
27.81 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
5.55 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
18.01 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
3.87 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
4.05 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
4.58 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
15.12 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
2.13 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
129.34 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
658 B lrw-r--r-- 2025-02-11 16:56:21
Edit Download
14.80 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
21.50 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
26.37 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
3.21 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
15.10 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
2.04 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
1.26 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
871 B lrw-r--r-- 2025-02-11 16:56:21
Edit Download
70.88 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
10.49 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
19.30 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
3.00 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
1.74 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
7.14 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
18.80 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
1.36 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
1.81 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
70.34 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
3.24 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
91.86 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
4.89 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
51.22 KB lrw-r--r-- 2025-02-11 16:56:21
Edit Download
If ZipArchive is unavailable, a .tar will be created (no compression).