CommonCryptorChaCha20.c [plain text]
#include "ccdebug.h"
#include <CommonCrypto/CommonCryptor.h>
#include <CommonCrypto/CommonCryptorSPI.h>
#include <corecrypto/cc.h>
#include <corecrypto/cc_priv.h>
#include <corecrypto/ccchacha20poly1305.h>
#include <corecrypto/ccchacha20poly1305_priv.h>
static inline CCCryptorStatus translate_corecrypto_error_code(int error)
{
switch (error) {
case CCERR_OK:
return kCCSuccess;
case CCERR_PARAMETER:
return kCCParamError;
default:
return kCCUnspecifiedError;
}
}
static inline CCCryptorStatus validate_parameters(size_t keyLength, size_t nonceLength)
{
if (keyLength != CCCHACHA20_KEY_NBYTES) {
return kCCKeySizeError;
}
if (nonceLength != CCCHACHA20_NONCE_NBYTES) {
return kCCParamError;
}
return kCCSuccess;
}
CCCryptorStatus CCCryptorChaCha20(const void *key, size_t keyLength,
const void *nonce, size_t nonceLength,
uint32_t counter,
const void *dataIn, size_t dataInLength, void *dataOut)
{
CCCryptorStatus status = validate_parameters(keyLength, nonceLength);
if (status != kCCSuccess) {
return status;
}
int result = ccchacha20(key, nonce, counter, dataInLength, dataIn, dataOut);
return translate_corecrypto_error_code(result);
}