Go to the documentation of this file.
32 #define TRACE_LEVEL IKE_TRACE_LEVEL
47 #if (IKE_SUPPORT == ENABLED)
69 context = sa->context;
72 idLen =
ntohs(idPayload->header.payloadLength);
81 #if (IKE_CERT_AUTH_SUPPORT == ENABLED)
83 if(context->certChain != NULL && context->certChainLen > 0)
91 #if (IKE_PSK_AUTH_SUPPORT == ENABLED)
93 if(context->pskLen > 0)
100 idLen,
authData, sa->originalInitiator);
106 *authDataLen = sa->prfKeyLen;
150 idLen =
ntohs(idPayload->header.payloadLength);
152 authDataLen =
ntohs(authPayload->header.payloadLength);
169 #if (IKE_CERT_AUTH_SUPPORT == ENABLED)
183 if(certPayload != NULL)
186 certDataLen =
ntohs(certPayload->header.payloadLength);
202 certDataLen, certInfo);
241 #if (IKE_PSK_AUTH_SUPPORT == ENABLED)
248 if(certPayload == NULL)
251 if(authDataLen == sa->prfKeyLen)
255 idLen, mac, !sa->originalInitiator);
312 const uint8_t *
id,
size_t idLen, uint8_t *mac,
bool_t initiator)
314 #if (IKE_PSK_AUTH_SUPPORT == ENABLED)
321 error =
ikePrf(sa->prfMacAlgo, sa->prfHashAlgo, sa->prfCipherAlgo, key,
322 keyLen,
"Key Pad for IKEv2", 17, macKey);
331 error =
ikePrf(sa->prfMacAlgo, sa->prfHashAlgo, sa->prfCipherAlgo,
332 sa->skpi, sa->prfKeyLen,
id, idLen, macId);
343 dataFrags[0].
buffer = sa->initiatorSaInit;
344 dataFrags[0].
length = sa->initiatorSaInitLen;
345 dataFrags[1].
buffer = sa->responderNonce;
346 dataFrags[1].
length = sa->responderNonceLen;
347 dataFrags[2].
buffer = macId;
348 dataFrags[2].
length = sa->prfKeyLen;
351 error =
ikePrfEx(sa->prfMacAlgo, sa->prfHashAlgo, sa->prfCipherAlgo,
352 macKey, sa->prfKeyLen, dataFrags,
arraysize(dataFrags), mac);
361 error =
ikePrf(sa->prfMacAlgo, sa->prfHashAlgo, sa->prfCipherAlgo,
362 sa->skpr, sa->prfKeyLen,
id, idLen, macId);
373 dataFrags[0].
buffer = sa->responderSaInit;
374 dataFrags[0].
length = sa->responderSaInitLen;
375 dataFrags[1].
buffer = sa->initiatorNonce;
376 dataFrags[1].
length = sa->initiatorNonceLen;
377 dataFrags[2].
buffer = macId;
378 dataFrags[2].
length = sa->prfKeyLen;
381 error =
ikePrfEx(sa->prfMacAlgo, sa->prfHashAlgo, sa->prfCipherAlgo,
382 macKey, sa->prfKeyLen, dataFrags,
arraysize(dataFrags), mac);
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)
X.509 certificate parsing.
Authentication of the IKE SA.
X509TbsCertificate tbsCert
error_t ikeGenerateSignature(IkeSaEntry *sa, const uint8_t *id, size_t idLen, uint8_t *authMethod, uint8_t *signature, size_t *signatureLen)
Signature generation.
@ IKE_AUTH_METHOD_ECDSA_P521_SHA512
ECDSA with SHA-512 on the P-521 curve.
error_t x509ParseCertificate(const uint8_t *data, size_t length, X509CertInfo *certInfo)
Parse a X.509 certificate.
@ IKE_AUTH_METHOD_RSA
RSA Digital Signature.
size_t pskLen
Length of the pre-shared key, in bytes.
error_t asn1DumpObject(const uint8_t *data, size_t length, uint_t level)
Display an ASN.1 data object.
#define osMemcmp(p1, p2, length)
error_t ikeVerifySignature(IkeSaEntry *sa, const uint8_t *id, size_t idLen, uint8_t authMethod, const X509SubjectPublicKeyInfo *publicKeyInfo, const uint8_t *signature, size_t signatureLen)
Signature verification.
#define IKE_MAX_DIGEST_SIZE
RSA/DSA/ECDSA/EdDSA signature generation.
error_t ikeGenerateAuth(IkeSaEntry *sa, const IkeIdPayload *idPayload, uint8_t *authMethod, uint8_t *authData, size_t *authDataLen)
Generate signature or MAC.
Peer Authorization Database (PAD) entry.
error_t ikePrfEx(MacAlgo macAlgo, const HashAlgo *hashAlgo, const CipherAlgo *cipherAlgo, const uint8_t *key, size_t keyLen, const DataFrag *dataFrags, uint_t dataNumFrags, uint8_t *output)
Pseudorandom function (prf function)
@ IKE_AUTH_METHOD_DIGITAL_SIGN
Digital Signature.
Data fragment descriptor.
error_t ikeVerifyAuth(IkeSaEntry *sa, IpsecPadEntry *padEntry, const IkeIdPayload *idPayload, const IkeCertPayload *certPayload, const IkeAuthPayload *authPayload)
Verify signature or MAC.
IKEv2 key derivation functions.
@ IKE_AUTH_METHOD_SHARED_KEY
Shared Key Message Integrity Code.
IKEv2 (Internet Key Exchange Protocol)
@ ERROR_AUTHENTICATION_FAILED
error_t ikeComputeMacAuth(IkeSaEntry *sa, const uint8_t *key, size_t keyLen, const uint8_t *id, size_t idLen, uint8_t *mac, bool_t initiator)
Compute MAC authentication data.
@ IKE_AUTH_METHOD_DSS
DSS Digital Signature.
@ IKE_AUTH_METHOD_ECDSA_P256_SHA256
ECDSA with SHA-256 on the P-256 curve.
@ ERROR_UNSUPPORTED_SIGNATURE_ALGO
X509SubjectPublicKeyInfo subjectPublicKeyInfo
@ IKE_AUTH_METHOD_ECDSA_P384_SHA384
ECDSA with SHA-384 on the P-384 curve.
RSA/DSA/ECDSA/EdDSA signature verification.
uint8_t psk[IPSEC_MAX_PSK_LEN]
Pre-shared key.
#define ikeAllocMem(size)
ASN.1 (Abstract Syntax Notation One)