Go to the documentation of this file.
32 #define TRACE_LEVEL IKE_TRACE_LEVEL
43 #if (IKE_SUPPORT == ENABLED && IKE_CERT_AUTH_SUPPORT == ENABLED)
58 #if (IKE_DSA_SIGN_SUPPORT == ENABLED)
115 #if (IKE_ECDSA_SIGN_SUPPORT == ENABLED)
160 #if (IKE_DSA_SIGN_SUPPORT == ENABLED)
220 #if (IKE_ECDSA_SIGN_SUPPORT == ENABLED)
270 #if (IKE_RSA_SIGN_SUPPORT == ENABLED)
274 #if (IKE_SHA1_SUPPORT == ENABLED)
284 #if (IKE_SHA256_SUPPORT == ENABLED)
294 #if (IKE_SHA384_SUPPORT == ENABLED)
304 #if (IKE_SHA512_SUPPORT == ENABLED)
322 #if (IKE_RSA_PSS_SIGN_SUPPORT == ENABLED)
352 #if (IKE_DSA_SIGN_SUPPORT == ENABLED)
356 #if (IKE_SHA1_SUPPORT == ENABLED)
366 #if (IKE_SHA256_SUPPORT == ENABLED)
376 #if (IKE_SHA384_SUPPORT == ENABLED)
386 #if (IKE_SHA512_SUPPORT == ENABLED)
404 #if (IKE_ECDSA_SIGN_SUPPORT == ENABLED)
413 #if (IKE_SHA1_SUPPORT == ENABLED)
423 #if (IKE_SHA256_SUPPORT == ENABLED)
433 #if (IKE_SHA384_SUPPORT == ENABLED)
443 #if (IKE_SHA512_SUPPORT == ENABLED)
461 #if (IKE_ED25519_SIGN_SUPPORT == ENABLED)
471 #if (IKE_ED448_SIGN_SUPPORT == ENABLED)
515 #if (IKE_RSA_SIGN_SUPPORT == ENABLED && IKE_SHA1_SUPPORT == ENABLED)
524 #if (IKE_RSA_SIGN_SUPPORT == ENABLED && IKE_SHA256_SUPPORT == ENABLED)
533 #if (IKE_RSA_SIGN_SUPPORT == ENABLED && IKE_SHA384_SUPPORT == ENABLED)
542 #if (IKE_RSA_SIGN_SUPPORT == ENABLED && IKE_SHA512_SUPPORT == ENABLED)
551 #if (IKE_RSA_PSS_SIGN_SUPPORT == ENABLED)
559 #if (IKE_SHA1_SUPPORT == ENABLED)
569 #if (IKE_SHA256_SUPPORT == ENABLED)
579 #if (IKE_SHA384_SUPPORT == ENABLED)
589 #if (IKE_SHA512_SUPPORT == ENABLED)
607 #if (IKE_DSA_SIGN_SUPPORT == ENABLED && IKE_SHA1_SUPPORT == ENABLED)
616 #if (IKE_DSA_SIGN_SUPPORT == ENABLED && IKE_SHA256_SUPPORT == ENABLED)
625 #if (IKE_DSA_SIGN_SUPPORT == ENABLED && IKE_SHA384_SUPPORT == ENABLED)
634 #if (IKE_DSA_SIGN_SUPPORT == ENABLED && IKE_SHA512_SUPPORT == ENABLED)
643 #if (IKE_ECDSA_SIGN_SUPPORT == ENABLED && IKE_SHA1_SUPPORT == ENABLED)
652 #if (IKE_ECDSA_SIGN_SUPPORT == ENABLED && IKE_SHA256_SUPPORT == ENABLED)
661 #if (IKE_ECDSA_SIGN_SUPPORT == ENABLED && IKE_SHA384_SUPPORT == ENABLED)
670 #if (IKE_ECDSA_SIGN_SUPPORT == ENABLED && IKE_SHA512_SUPPORT == ENABLED)
679 #if (IKE_ED25519_SIGN_SUPPORT == ENABLED)
688 #if (IKE_ED448_SIGN_SUPPORT == ENABLED)
715 uint16_t preferredHashAlgoId)
717 #if (IKE_SIGN_HASH_ALGOS_SUPPORT == ENABLED)
730 if((sa->signHashAlgos & (1U <<
n)) != 0)
745 if((sa->signHashAlgos & (1U <<
n)) != 0)
753 #if (IKE_SHA1_SUPPORT == ENABLED)
761 #if (IKE_SHA256_SUPPORT == ENABLED)
769 #if (IKE_SHA384_SUPPORT == ENABLED)
777 #if (IKE_SHA512_SUPPORT == ENABLED)
821 error =
ikeComputePrf(sa, sa->skpi, sa->prfKeyLen,
id, idLen,
830 messageChunks[0].
buffer = sa->initiatorSaInit;
831 messageChunks[0].
length = sa->initiatorSaInitLen;
835 messageChunks[1].
buffer = sa->responderNonce;
836 messageChunks[1].
length = sa->responderNonceLen;
837 messageChunks[2].
buffer = macId;
838 messageChunks[2].
length = sa->prfKeyLen;
844 error =
ikeComputePrf(sa, sa->skpr, sa->prfKeyLen,
id, idLen, macId);
853 messageChunks[0].
buffer = sa->responderSaInit;
854 messageChunks[0].
length = sa->responderSaInitLen;
858 messageChunks[1].
buffer = sa->initiatorNonce;
859 messageChunks[1].
length = sa->initiatorNonceLen;
860 messageChunks[2].
buffer = macId;
861 messageChunks[2].
length = sa->prfKeyLen;
883 const uint8_t *
id,
size_t idLen, uint8_t *digest,
bool_t initiator)
893 error =
ikeComputePrf(sa, sa->skpi, sa->prfKeyLen,
id, idLen, macId);
901 hashAlgo->
init(&hashContext);
902 hashAlgo->
update(&hashContext, sa->initiatorSaInit, sa->initiatorSaInitLen);
906 hashAlgo->
update(&hashContext, sa->responderNonce, sa->responderNonceLen);
907 hashAlgo->
update(&hashContext, macId, sa->prfKeyLen);
908 hashAlgo->
final(&hashContext, digest);
914 error =
ikeComputePrf(sa, sa->skpr, sa->prfKeyLen,
id, idLen, macId);
923 hashAlgo->
init(&hashContext);
924 hashAlgo->
update(&hashContext, sa->responderSaInit, sa->responderSaInitLen);
928 hashAlgo->
update(&hashContext, sa->initiatorNonce, sa->initiatorNonceLen);
929 hashAlgo->
update(&hashContext, macId, sa->prfKeyLen);
930 hashAlgo->
final(&hashContext, digest);
IkeCertType
Certificate types.
Generic hash algorithm context.
@ IKE_CERT_TYPE_ECDSA_BRAINPOOLP384R1
const uint8_t SHA512_WITH_RSA_ENCRYPTION_OID[9]
error_t ikeComputePrf(IkeSaEntry *sa, const uint8_t *k, size_t kLen, const void *s, size_t sLen, uint8_t *output)
Pseudorandom function (prf function)
IkeSignAlgo
Signature algorithms.
error_t dsaImportSignature(DsaSignature *signature, const uint8_t *data, size_t length)
Import an ASN.1 encoded DSA signature.
error_t ikeParseDsaSignature(const uint8_t *data, size_t length, DsaSignature *signature, IkeSignFormat format)
DSA signature parsing.
X509OctetString maskGenHashAlgo
error_t ikeDigestSignedOctets(IkeSaEntry *sa, const HashAlgo *hashAlgo, const uint8_t *id, size_t idLen, uint8_t *digest, bool_t initiator)
Digest signed octets.
error_t ikeParseEcdsaSignature(const EcCurve *curve, const uint8_t *data, size_t length, EcdsaSignature *signature, IkeSignFormat format)
ECDSA signature parsing.
const uint8_t RSASSA_PSS_OID[9]
#define IKE_MAX_DIGEST_SIZE
@ IKE_CERT_TYPE_ECDSA_P384
const uint8_t ECDSA_WITH_SHA256_OID[8]
const uint8_t MGF1_OID[9]
error_t ikeSelectSignAlgoId(IkeCertType certType, const HashAlgo *hashAlgo, X509SignAlgoId *signAlgoId)
Select the algorithm identifier that matches the specified certificate type and hash algorithms.
error_t ecdsaExportSignature(const EcdsaSignature *signature, uint8_t *data, size_t *length, EcdsaSignatureFormat format)
Export an ECDSA signature.
@ IKE_CERT_TYPE_ECDSA_BRAINPOOLP256R1
error_t ikeGetSignedOctets(IkeSaEntry *sa, const uint8_t *id, size_t idLen, uint8_t *macId, DataChunk *messageChunks, bool_t initiator)
Retrieve the octets to be signed using EdDSA.
const uint8_t SHA384_WITH_RSA_ENCRYPTION_OID[9]
Helper functions for signature generation and verification.
error_t ecdsaImportSignature(EcdsaSignature *signature, const EcCurve *curve, const uint8_t *data, size_t length, EcdsaSignatureFormat format)
Import an ECDSA signature.
const uint8_t DSA_WITH_SHA384_OID[9]
error_t ikeSelectSignAlgo(const X509SignAlgoId *signAlgoId, IkeSignAlgo *signAlgo, const HashAlgo **hashAlgo)
Select the signature and hash algorithms that match the specified identifier.
const uint8_t SHA256_OID[9]
error_t mpiImport(Mpi *r, const uint8_t *input, size_t length, MpiFormat format)
Octet string to integer conversion.
@ ECDSA_SIGNATURE_FORMAT_RAW
const uint8_t ECDSA_WITH_SHA384_OID[8]
const uint8_t DSA_WITH_SHA512_OID[9]
error_t mpiExport(const Mpi *a, uint8_t *output, size_t length, MpiFormat format)
Integer to octet string conversion.
X509OctetString maskGenAlgo
const uint8_t ECDSA_WITH_SHA1_OID[7]
const uint8_t SHA256_WITH_RSA_ENCRYPTION_OID[9]
@ IKE_CERT_TYPE_ECDSA_BRAINPOOLP512R1
const uint8_t ED448_OID[3]
const uint8_t ECDSA_WITH_SHA512_OID[8]
const uint8_t ED25519_OID[3]
IKEv2 (Internet Key Exchange Protocol)
IkeSignFormat
Signature format.
@ ERROR_INVALID_SIGNATURE_ALGO
@ ECDSA_SIGNATURE_FORMAT_ASN1
#define OID_COMP(oid1, oidLen1, oid2)
error_t ikeFormatEcdsaSignature(const EcdsaSignature *signature, uint8_t *data, size_t *length, IkeSignFormat format)
ECDSA signature formatting.
#define IKE_SHA1_DIGEST_SIZE
const uint8_t DSA_WITH_SHA1_OID[7]
const uint8_t DSA_WITH_SHA256_OID[9]
const uint8_t SHA512_OID[9]
error_t dsaExportSignature(const DsaSignature *signature, uint8_t *data, size_t *length)
Export a DSA signature to ASN.1 format.
const uint8_t SHA1_OID[5]
Common interface for hash algorithms.
@ IKE_CERT_TYPE_ECDSA_P521
@ ERROR_UNSUPPORTED_SIGNATURE_ALGO
const uint8_t SHA384_OID[9]
@ ERROR_INVALID_SIGNATURE
X509RsaPssParameters rsaPssParams
const uint8_t SHA1_WITH_RSA_ENCRYPTION_OID[9]
IKEv2 algorithm negotiation.
Signature algorithm identifier.
const HashAlgo * ikeSelectSignHashAlgo(IkeSaEntry *sa, uint16_t preferredHashAlgoId)
Select the hash algorithm to be used for signing.
error_t ikeFormatDsaSignature(const DsaSignature *signature, uint8_t *data, size_t *length, IkeSignFormat format)
DSA signature formatting.
@ IKE_CERT_TYPE_ECDSA_P256