Go to the documentation of this file.
32 #define TRACE_LEVEL IKE_TRACE_LEVEL
44 #if (IKE_SUPPORT == ENABLED && IKE_CERT_AUTH_SUPPORT == ENABLED)
59 #if (IKE_DSA_SIGN_SUPPORT == ENABLED)
116 #if (IKE_ECDSA_SIGN_SUPPORT == ENABLED)
161 #if (IKE_DSA_SIGN_SUPPORT == ENABLED)
221 #if (IKE_ECDSA_SIGN_SUPPORT == ENABLED)
271 #if (IKE_RSA_SIGN_SUPPORT == ENABLED)
275 #if (IKE_SHA1_SUPPORT == ENABLED)
285 #if (IKE_SHA256_SUPPORT == ENABLED)
295 #if (IKE_SHA384_SUPPORT == ENABLED)
305 #if (IKE_SHA512_SUPPORT == ENABLED)
323 #if (IKE_RSA_PSS_SIGN_SUPPORT == ENABLED)
353 #if (IKE_DSA_SIGN_SUPPORT == ENABLED)
357 #if (IKE_SHA1_SUPPORT == ENABLED)
367 #if (IKE_SHA256_SUPPORT == ENABLED)
377 #if (IKE_SHA384_SUPPORT == ENABLED)
387 #if (IKE_SHA512_SUPPORT == ENABLED)
405 #if (IKE_ECDSA_SIGN_SUPPORT == ENABLED)
414 #if (IKE_SHA1_SUPPORT == ENABLED)
424 #if (IKE_SHA256_SUPPORT == ENABLED)
434 #if (IKE_SHA384_SUPPORT == ENABLED)
444 #if (IKE_SHA512_SUPPORT == ENABLED)
462 #if (IKE_ED25519_SIGN_SUPPORT == ENABLED)
472 #if (IKE_ED448_SIGN_SUPPORT == ENABLED)
516 #if (IKE_RSA_SIGN_SUPPORT == ENABLED && IKE_SHA1_SUPPORT == ENABLED)
525 #if (IKE_RSA_SIGN_SUPPORT == ENABLED && IKE_SHA256_SUPPORT == ENABLED)
534 #if (IKE_RSA_SIGN_SUPPORT == ENABLED && IKE_SHA384_SUPPORT == ENABLED)
543 #if (IKE_RSA_SIGN_SUPPORT == ENABLED && IKE_SHA512_SUPPORT == ENABLED)
552 #if (IKE_RSA_PSS_SIGN_SUPPORT == ENABLED)
560 #if (IKE_SHA1_SUPPORT == ENABLED)
570 #if (IKE_SHA256_SUPPORT == ENABLED)
580 #if (IKE_SHA384_SUPPORT == ENABLED)
590 #if (IKE_SHA512_SUPPORT == ENABLED)
608 #if (IKE_DSA_SIGN_SUPPORT == ENABLED && IKE_SHA1_SUPPORT == ENABLED)
617 #if (IKE_DSA_SIGN_SUPPORT == ENABLED && IKE_SHA256_SUPPORT == ENABLED)
626 #if (IKE_DSA_SIGN_SUPPORT == ENABLED && IKE_SHA384_SUPPORT == ENABLED)
635 #if (IKE_DSA_SIGN_SUPPORT == ENABLED && IKE_SHA512_SUPPORT == ENABLED)
644 #if (IKE_ECDSA_SIGN_SUPPORT == ENABLED && IKE_SHA1_SUPPORT == ENABLED)
653 #if (IKE_ECDSA_SIGN_SUPPORT == ENABLED && IKE_SHA256_SUPPORT == ENABLED)
662 #if (IKE_ECDSA_SIGN_SUPPORT == ENABLED && IKE_SHA384_SUPPORT == ENABLED)
671 #if (IKE_ECDSA_SIGN_SUPPORT == ENABLED && IKE_SHA512_SUPPORT == ENABLED)
680 #if (IKE_ED25519_SIGN_SUPPORT == ENABLED)
689 #if (IKE_ED448_SIGN_SUPPORT == ENABLED)
716 uint16_t preferredHashAlgoId)
718 #if (IKE_SIGN_HASH_ALGOS_SUPPORT == ENABLED)
731 if((sa->signHashAlgos & (1U <<
n)) != 0)
746 if((sa->signHashAlgos & (1U <<
n)) != 0)
754 #if (IKE_SHA1_SUPPORT == ENABLED)
762 #if (IKE_SHA256_SUPPORT == ENABLED)
770 #if (IKE_SHA384_SUPPORT == ENABLED)
778 #if (IKE_SHA512_SUPPORT == ENABLED)
822 error =
ikePrf(sa->prfMacAlgo, sa->prfHashAlgo, sa->prfCipherAlgo,
823 sa->skpi, sa->prfKeyLen,
id, idLen, macId);
831 messageFrags[0].
buffer = sa->initiatorSaInit;
832 messageFrags[0].
length = sa->initiatorSaInitLen;
836 messageFrags[1].
buffer = sa->responderNonce;
837 messageFrags[1].
length = sa->responderNonceLen;
838 messageFrags[2].
buffer = macId;
839 messageFrags[2].
length = sa->prfKeyLen;
845 error =
ikePrf(sa->prfMacAlgo, sa->prfHashAlgo, sa->prfCipherAlgo,
846 sa->skpr, sa->prfKeyLen,
id, idLen, macId);
855 messageFrags[0].
buffer = sa->responderSaInit;
856 messageFrags[0].
length = sa->responderSaInitLen;
860 messageFrags[1].
buffer = sa->initiatorNonce;
861 messageFrags[1].
length = sa->initiatorNonceLen;
862 messageFrags[2].
buffer = macId;
863 messageFrags[2].
length = sa->prfKeyLen;
885 const uint8_t *
id,
size_t idLen, uint8_t *digest,
bool_t initiator)
895 error =
ikePrf(sa->prfMacAlgo, sa->prfHashAlgo, sa->prfCipherAlgo,
896 sa->skpi, sa->prfKeyLen,
id, idLen, macId);
904 hashAlgo->
init(&hashContext);
905 hashAlgo->
update(&hashContext, sa->initiatorSaInit, sa->initiatorSaInitLen);
909 hashAlgo->
update(&hashContext, sa->responderNonce, sa->responderNonceLen);
910 hashAlgo->
update(&hashContext, macId, sa->prfKeyLen);
911 hashAlgo->
final(&hashContext, digest);
917 error =
ikePrf(sa->prfMacAlgo, sa->prfHashAlgo, sa->prfCipherAlgo,
918 sa->skpr, sa->prfKeyLen,
id, idLen, macId);
927 hashAlgo->
init(&hashContext);
928 hashAlgo->
update(&hashContext, sa->responderSaInit, sa->responderSaInitLen);
932 hashAlgo->
update(&hashContext, sa->initiatorNonce, sa->initiatorNonceLen);
933 hashAlgo->
update(&hashContext, macId, sa->prfKeyLen);
934 hashAlgo->
final(&hashContext, digest);
error_t ecdsaImportSignature(EcdsaSignature *signature, const EcCurve *curve, const uint8_t *input, size_t length, EcdsaSignatureFormat format)
Import an ECDSA signature.
IkeCertType
Certificate types.
error_t ikePrf(MacAlgo macAlgo, const HashAlgo *hashAlgo, const CipherAlgo *cipherAlgo, const uint8_t *key, size_t keyLen, const uint8_t *data, size_t dataLen, uint8_t *output)
Pseudorandom function (prf function)
error_t dsaImportSignature(DsaSignature *signature, const uint8_t *input, size_t length)
Import an ASN.1 encoded DSA signature.
Generic hash algorithm context.
@ IKE_CERT_TYPE_ECDSA_BRAINPOOLP384R1
const uint8_t SHA512_WITH_RSA_ENCRYPTION_OID[9]
IkeSignAlgo
Signature algorithms.
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.
@ IKE_CERT_TYPE_ECDSA_BRAINPOOLP256R1
error_t ecdsaExportSignature(const EcdsaSignature *signature, uint8_t *output, size_t *written, EcdsaSignatureFormat format)
Export an ECDSA signature.
const uint8_t SHA384_WITH_RSA_ENCRYPTION_OID[9]
Helper functions for signature generation and verification.
const uint8_t DSA_WITH_SHA384_OID[9]
error_t ikeGetSignedOctets(IkeSaEntry *sa, const uint8_t *id, size_t idLen, uint8_t *macId, DataFrag *messageFrags, bool_t initiator)
Retrieve the octets to be signed using EdDSA.
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
Data fragment descriptor.
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]
IKEv2 key derivation functions.
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
error_t dsaExportSignature(const DsaSignature *signature, uint8_t *output, size_t *written)
Export a DSA signature to ASN.1 format.
@ 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]
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