wpa_supplicant / hostapd
2.5
|
Wrapper functions for crypto libraries. More...
Go to the source code of this file.
Functions | |
int | md4_vector (size_t num_elem, const u8 *addr[], const size_t *len, u8 *mac) |
MD4 hash for data vector. More... | |
int | md5_vector (size_t num_elem, const u8 *addr[], const size_t *len, u8 *mac) |
MD5 hash for data vector. More... | |
int | sha1_vector (size_t num_elem, const u8 *addr[], const size_t *len, u8 *mac) |
SHA-1 hash for data vector. More... | |
int __must_check | fips186_2_prf (const u8 *seed, size_t seed_len, u8 *x, size_t xlen) |
NIST FIPS Publication 186-2 change notice 1 PRF. More... | |
int | sha256_vector (size_t num_elem, const u8 *addr[], const size_t *len, u8 *mac) |
SHA256 hash for data vector. More... | |
void | des_encrypt (const u8 *clear, const u8 *key, u8 *cypher) |
Encrypt one block with DES. More... | |
void * | aes_encrypt_init (const u8 *key, size_t len) |
Initialize AES for encryption. More... | |
void | aes_encrypt (void *ctx, const u8 *plain, u8 *crypt) |
Encrypt one AES block. More... | |
void | aes_encrypt_deinit (void *ctx) |
Deinitialize AES encryption. More... | |
void * | aes_decrypt_init (const u8 *key, size_t len) |
Initialize AES for decryption. More... | |
void | aes_decrypt (void *ctx, const u8 *crypt, u8 *plain) |
Decrypt one AES block. More... | |
void | aes_decrypt_deinit (void *ctx) |
Deinitialize AES decryption. More... | |
struct crypto_hash * | crypto_hash_init (enum crypto_hash_alg alg, const u8 *key, size_t key_len) |
Initialize hash/HMAC function. More... | |
void | crypto_hash_update (struct crypto_hash *ctx, const u8 *data, size_t len) |
Add data to hash calculation. More... | |
int | crypto_hash_finish (struct crypto_hash *ctx, u8 *hash, size_t *len) |
Complete hash calculation. More... | |
struct crypto_cipher * | crypto_cipher_init (enum crypto_cipher_alg alg, const u8 *iv, const u8 *key, size_t key_len) |
Initialize block/stream cipher function. More... | |
int __must_check | crypto_cipher_encrypt (struct crypto_cipher *ctx, const u8 *plain, u8 *crypt, size_t len) |
Cipher encrypt. More... | |
int __must_check | crypto_cipher_decrypt (struct crypto_cipher *ctx, const u8 *crypt, u8 *plain, size_t len) |
Cipher decrypt. More... | |
void | crypto_cipher_deinit (struct crypto_cipher *ctx) |
Free cipher context. More... | |
struct crypto_public_key * | crypto_public_key_import (const u8 *key, size_t len) |
Import an RSA public key. More... | |
struct crypto_public_key * | crypto_public_key_import_parts (const u8 *n, size_t n_len, const u8 *e, size_t e_len) |
struct crypto_private_key * | crypto_private_key_import (const u8 *key, size_t len, const char *passwd) |
Import an RSA private key. More... | |
struct crypto_public_key * | crypto_public_key_from_cert (const u8 *buf, size_t len) |
Import an RSA public key from a certificate. More... | |
int __must_check | crypto_public_key_encrypt_pkcs1_v15 (struct crypto_public_key *key, const u8 *in, size_t inlen, u8 *out, size_t *outlen) |
Public key encryption (PKCS #1 v1.5) More... | |
int __must_check | crypto_private_key_decrypt_pkcs1_v15 (struct crypto_private_key *key, const u8 *in, size_t inlen, u8 *out, size_t *outlen) |
Private key decryption (PKCS #1 v1.5) More... | |
int __must_check | crypto_private_key_sign_pkcs1 (struct crypto_private_key *key, const u8 *in, size_t inlen, u8 *out, size_t *outlen) |
Sign with private key (PKCS #1) More... | |
void | crypto_public_key_free (struct crypto_public_key *key) |
Free public key. More... | |
void | crypto_private_key_free (struct crypto_private_key *key) |
Free private key. More... | |
int __must_check | crypto_public_key_decrypt_pkcs1 (struct crypto_public_key *key, const u8 *crypt, size_t crypt_len, u8 *plain, size_t *plain_len) |
Decrypt PKCS #1 signature. More... | |
int __must_check | crypto_global_init (void) |
Initialize crypto wrapper. More... | |
void | crypto_global_deinit (void) |
Deinitialize crypto wrapper. More... | |
int __must_check | crypto_mod_exp (const u8 *base, size_t base_len, const u8 *power, size_t power_len, const u8 *modulus, size_t modulus_len, u8 *result, size_t *result_len) |
Modular exponentiation of large integers. More... | |
int | rc4_skip (const u8 *key, size_t keylen, size_t skip, u8 *data, size_t data_len) |
XOR RC4 stream to given data with skip-stream-start. More... | |
int | crypto_get_random (void *buf, size_t len) |
Generate cryptographically strong pseudy-random bytes. More... | |
struct crypto_bignum * | crypto_bignum_init (void) |
Allocate memory for bignum. More... | |
struct crypto_bignum * | crypto_bignum_init_set (const u8 *buf, size_t len) |
Allocate memory for bignum and set the value. More... | |
void | crypto_bignum_deinit (struct crypto_bignum *n, int clear) |
Free bignum. More... | |
int | crypto_bignum_to_bin (const struct crypto_bignum *a, u8 *buf, size_t buflen, size_t padlen) |
Set binary buffer to unsigned bignum. More... | |
int | crypto_bignum_add (const struct crypto_bignum *a, const struct crypto_bignum *b, struct crypto_bignum *c) |
c = a + b More... | |
int | crypto_bignum_mod (const struct crypto_bignum *a, const struct crypto_bignum *b, struct crypto_bignum *c) |
c = a % b More... | |
int | crypto_bignum_exptmod (const struct crypto_bignum *a, const struct crypto_bignum *b, const struct crypto_bignum *c, struct crypto_bignum *d) |
Modular exponentiation: d = a^b (mod c) More... | |
int | crypto_bignum_inverse (const struct crypto_bignum *a, const struct crypto_bignum *b, struct crypto_bignum *c) |
Inverse a bignum so that a * c = 1 (mod b) More... | |
int | crypto_bignum_sub (const struct crypto_bignum *a, const struct crypto_bignum *b, struct crypto_bignum *c) |
c = a - b More... | |
int | crypto_bignum_div (const struct crypto_bignum *a, const struct crypto_bignum *b, struct crypto_bignum *c) |
c = a / b More... | |
int | crypto_bignum_mulmod (const struct crypto_bignum *a, const struct crypto_bignum *b, const struct crypto_bignum *c, struct crypto_bignum *d) |
d = a * b (mod c) More... | |
int | crypto_bignum_cmp (const struct crypto_bignum *a, const struct crypto_bignum *b) |
Compare two bignums. More... | |
int | crypto_bignum_bits (const struct crypto_bignum *a) |
Get size of a bignum in bits. More... | |
int | crypto_bignum_is_zero (const struct crypto_bignum *a) |
Is the given bignum zero. More... | |
int | crypto_bignum_is_one (const struct crypto_bignum *a) |
Is the given bignum one. More... | |
int | crypto_bignum_legendre (const struct crypto_bignum *a, const struct crypto_bignum *p) |
Compute the Legendre symbol (a/p) More... | |
struct crypto_ec * | crypto_ec_init (int group) |
Initialize elliptic curve context. More... | |
void | crypto_ec_deinit (struct crypto_ec *e) |
Deinitialize elliptic curve context. More... | |
size_t | crypto_ec_prime_len (struct crypto_ec *e) |
Get length of the prime in octets. More... | |
size_t | crypto_ec_prime_len_bits (struct crypto_ec *e) |
Get length of the prime in bits. More... | |
const struct crypto_bignum * | crypto_ec_get_prime (struct crypto_ec *e) |
Get prime defining an EC group. More... | |
const struct crypto_bignum * | crypto_ec_get_order (struct crypto_ec *e) |
Get order of an EC group. More... | |
struct crypto_ec_point * | crypto_ec_point_init (struct crypto_ec *e) |
Initialize data for an EC point. More... | |
void | crypto_ec_point_deinit (struct crypto_ec_point *p, int clear) |
Deinitialize EC point data. More... | |
int | crypto_ec_point_to_bin (struct crypto_ec *e, const struct crypto_ec_point *point, u8 *x, u8 *y) |
Write EC point value as binary data. More... | |
struct crypto_ec_point * | crypto_ec_point_from_bin (struct crypto_ec *e, const u8 *val) |
Create EC point from binary data. More... | |
int | crypto_ec_point_add (struct crypto_ec *e, const struct crypto_ec_point *a, const struct crypto_ec_point *b, struct crypto_ec_point *c) |
c = a + b More... | |
int | crypto_ec_point_mul (struct crypto_ec *e, const struct crypto_ec_point *p, const struct crypto_bignum *b, struct crypto_ec_point *res) |
res = b * p More... | |
int | crypto_ec_point_invert (struct crypto_ec *e, struct crypto_ec_point *p) |
Compute inverse of an EC point. More... | |
int | crypto_ec_point_solve_y_coord (struct crypto_ec *e, struct crypto_ec_point *p, const struct crypto_bignum *x, int y_bit) |
Solve y coordinate for an x coordinate. More... | |
struct crypto_bignum * | crypto_ec_point_compute_y_sqr (struct crypto_ec *e, const struct crypto_bignum *x) |
Compute y^2 = x^3 + ax + b. More... | |
int | crypto_ec_point_is_at_infinity (struct crypto_ec *e, const struct crypto_ec_point *p) |
Check whether EC point is neutral element. More... | |
int | crypto_ec_point_is_on_curve (struct crypto_ec *e, const struct crypto_ec_point *p) |
Check whether EC point is on curve. More... | |
int | crypto_ec_point_cmp (const struct crypto_ec *e, const struct crypto_ec_point *a, const struct crypto_ec_point *b) |
Compare two EC points. More... | |
Wrapper functions for crypto libraries.
This file defines the cryptographic functions that need to be implemented for wpa_supplicant and hostapd. When TLS is not used, internal implementation of MD5, SHA1, and AES is used and no external libraries are required. When TLS is enabled (e.g., by enabling EAP-TLS or EAP-PEAP), the crypto library used by the TLS implementation is expected to be used for non-TLS needs, too, in order to save space by not implementing these functions twice.
Wrapper code for using each crypto library is in its own file (crypto*.c) and one of these files is build and linked in to provide the functions defined here.
void aes_decrypt | ( | void * | ctx, |
const u8 * | crypt, | ||
u8 * | plain | ||
) |
Decrypt one AES block.
ctx | Context pointer from aes_encrypt_init() |
crypt | Encrypted data (16 bytes) |
plain | Buffer for the decrypted data (16 bytes) |
void aes_decrypt_deinit | ( | void * | ctx | ) |
Deinitialize AES decryption.
ctx | Context pointer from aes_encrypt_init() |
void* aes_decrypt_init | ( | const u8 * | key, |
size_t | len | ||
) |
Initialize AES for decryption.
key | Decryption key |
len | Key length in bytes (usually 16, i.e., 128 bits) |
void aes_encrypt | ( | void * | ctx, |
const u8 * | plain, | ||
u8 * | crypt | ||
) |
Encrypt one AES block.
ctx | Context pointer from aes_encrypt_init() |
plain | Plaintext data to be encrypted (16 bytes) |
crypt | Buffer for the encrypted data (16 bytes) |
void aes_encrypt_deinit | ( | void * | ctx | ) |
Deinitialize AES encryption.
ctx | Context pointer from aes_encrypt_init() |
void* aes_encrypt_init | ( | const u8 * | key, |
size_t | len | ||
) |
Initialize AES for encryption.
key | Encryption key |
len | Key length in bytes (usually 16, i.e., 128 bits) |
int crypto_bignum_add | ( | const struct crypto_bignum * | a, |
const struct crypto_bignum * | b, | ||
struct crypto_bignum * | c | ||
) |
c = a + b
a | Bignum |
b | Bignum |
c | Bignum; used to store the result of a + b |
int crypto_bignum_bits | ( | const struct crypto_bignum * | a | ) |
Get size of a bignum in bits.
a | Bignum |
int crypto_bignum_cmp | ( | const struct crypto_bignum * | a, |
const struct crypto_bignum * | b | ||
) |
Compare two bignums.
a | Bignum |
b | Bignum |
void crypto_bignum_deinit | ( | struct crypto_bignum * | n, |
int | clear | ||
) |
Free bignum.
n | Bignum from crypto_bignum_init() or crypto_bignum_init_set() |
clear | Whether to clear the value from memory |
int crypto_bignum_div | ( | const struct crypto_bignum * | a, |
const struct crypto_bignum * | b, | ||
struct crypto_bignum * | c | ||
) |
c = a / b
a | Bignum |
b | Bignum |
c | Bignum; used to store the result of a / b |
int crypto_bignum_exptmod | ( | const struct crypto_bignum * | a, |
const struct crypto_bignum * | b, | ||
const struct crypto_bignum * | c, | ||
struct crypto_bignum * | d | ||
) |
Modular exponentiation: d = a^b (mod c)
a | Bignum; base |
b | Bignum; exponent |
c | Bignum; modulus |
d | Bignum; used to store the result of a^b (mod c) |
struct crypto_bignum* crypto_bignum_init | ( | void | ) |
Allocate memory for bignum.
struct crypto_bignum* crypto_bignum_init_set | ( | const u8 * | buf, |
size_t | len | ||
) |
Allocate memory for bignum and set the value.
buf | Buffer with unsigned binary value |
len | Length of buf in octets |
int crypto_bignum_inverse | ( | const struct crypto_bignum * | a, |
const struct crypto_bignum * | b, | ||
struct crypto_bignum * | c | ||
) |
Inverse a bignum so that a * c = 1 (mod b)
a | Bignum |
b | Bignum |
c | Bignum; used to store the result |
int crypto_bignum_is_one | ( | const struct crypto_bignum * | a | ) |
Is the given bignum one.
a | Bignum |
int crypto_bignum_is_zero | ( | const struct crypto_bignum * | a | ) |
Is the given bignum zero.
a | Bignum |
int crypto_bignum_legendre | ( | const struct crypto_bignum * | a, |
const struct crypto_bignum * | p | ||
) |
Compute the Legendre symbol (a/p)
a | Bignum |
p | Bignum |
int crypto_bignum_mod | ( | const struct crypto_bignum * | a, |
const struct crypto_bignum * | b, | ||
struct crypto_bignum * | c | ||
) |
c = a % b
a | Bignum |
b | Bignum |
c | Bignum; used to store the result of a % b |
int crypto_bignum_mulmod | ( | const struct crypto_bignum * | a, |
const struct crypto_bignum * | b, | ||
const struct crypto_bignum * | c, | ||
struct crypto_bignum * | d | ||
) |
d = a * b (mod c)
a | Bignum |
b | Bignum |
c | Bignum |
d | Bignum; used to store the result of (a * b) % c |
int crypto_bignum_sub | ( | const struct crypto_bignum * | a, |
const struct crypto_bignum * | b, | ||
struct crypto_bignum * | c | ||
) |
c = a - b
a | Bignum |
b | Bignum |
c | Bignum; used to store the result of a - b |
int crypto_bignum_to_bin | ( | const struct crypto_bignum * | a, |
u8 * | buf, | ||
size_t | buflen, | ||
size_t | padlen | ||
) |
Set binary buffer to unsigned bignum.
a | Bignum |
buf | Buffer for the binary number |
len | Length of buf in octets |
padlen | Length in octets to pad the result to or 0 to indicate no padding |
int __must_check crypto_cipher_decrypt | ( | struct crypto_cipher * | ctx, |
const u8 * | crypt, | ||
u8 * | plain, | ||
size_t | len | ||
) |
Cipher decrypt.
ctx | Context pointer from crypto_cipher_init() |
crypt | Ciphertext to decrypt |
plain | Resulting plaintext |
len | Length of the cipher text |
This function is only used with internal TLSv1 implementation (CONFIG_TLS=internal). If that is not used, the crypto wrapper does not need to implement this.
void crypto_cipher_deinit | ( | struct crypto_cipher * | ctx | ) |
Free cipher context.
ctx | Context pointer from crypto_cipher_init() |
This function is only used with internal TLSv1 implementation (CONFIG_TLS=internal). If that is not used, the crypto wrapper does not need to implement this.
int __must_check crypto_cipher_encrypt | ( | struct crypto_cipher * | ctx, |
const u8 * | plain, | ||
u8 * | crypt, | ||
size_t | len | ||
) |
Cipher encrypt.
ctx | Context pointer from crypto_cipher_init() |
plain | Plaintext to cipher |
crypt | Resulting ciphertext |
len | Length of the plaintext |
This function is only used with internal TLSv1 implementation (CONFIG_TLS=internal). If that is not used, the crypto wrapper does not need to implement this.
struct crypto_cipher* crypto_cipher_init | ( | enum crypto_cipher_alg | alg, |
const u8 * | iv, | ||
const u8 * | key, | ||
size_t | key_len | ||
) |
Initialize block/stream cipher function.
alg | Cipher algorithm |
iv | Initialization vector for block ciphers or NULL for stream ciphers |
key | Cipher key |
key_len | Length of key in bytes |
This function is only used with internal TLSv1 implementation (CONFIG_TLS=internal). If that is not used, the crypto wrapper does not need to implement this.
void crypto_ec_deinit | ( | struct crypto_ec * | e | ) |
Deinitialize elliptic curve context.
e | EC context from crypto_ec_init() |
const struct crypto_bignum* crypto_ec_get_order | ( | struct crypto_ec * | e | ) |
Get order of an EC group.
e | EC context from crypto_ec_init() |
const struct crypto_bignum* crypto_ec_get_prime | ( | struct crypto_ec * | e | ) |
Get prime defining an EC group.
e | EC context from crypto_ec_init() |
struct crypto_ec* crypto_ec_init | ( | int | group | ) |
Initialize elliptic curve context.
group | Identifying number for the ECC group (IANA "Group Description" attribute registrty for RFC 2409) |
int crypto_ec_point_add | ( | struct crypto_ec * | e, |
const struct crypto_ec_point * | a, | ||
const struct crypto_ec_point * | b, | ||
struct crypto_ec_point * | c | ||
) |
c = a + b
e | EC context from crypto_ec_init() |
a | Bignum |
b | Bignum |
c | Bignum; used to store the result of a + b |
int crypto_ec_point_cmp | ( | const struct crypto_ec * | e, |
const struct crypto_ec_point * | a, | ||
const struct crypto_ec_point * | b | ||
) |
Compare two EC points.
e | EC context from crypto_ec_init() |
a | EC point |
b | EC point |
struct crypto_bignum* crypto_ec_point_compute_y_sqr | ( | struct crypto_ec * | e, |
const struct crypto_bignum * | x | ||
) |
Compute y^2 = x^3 + ax + b.
e | EC context from crypto_ec_init() |
x | x coordinate |
void crypto_ec_point_deinit | ( | struct crypto_ec_point * | p, |
int | clear | ||
) |
Deinitialize EC point data.
p | EC point data from crypto_ec_point_init() |
clear | Whether to clear the EC point value from memory |
struct crypto_ec_point* crypto_ec_point_from_bin | ( | struct crypto_ec * | e, |
const u8 * | val | ||
) |
Create EC point from binary data.
e | EC context from crypto_ec_init() |
val | Binary data to read the EC point from |
This function readers x and y coordinates of the EC point from the provided buffer assuming the values are in big endian byte order with fields padded to the length of the prime defining the group.
struct crypto_ec_point* crypto_ec_point_init | ( | struct crypto_ec * | e | ) |
Initialize data for an EC point.
e | EC context from crypto_ec_init() |
int crypto_ec_point_invert | ( | struct crypto_ec * | e, |
struct crypto_ec_point * | p | ||
) |
Compute inverse of an EC point.
e | EC context from crypto_ec_init() |
p | EC point to invert (and result of the operation) |
int crypto_ec_point_is_at_infinity | ( | struct crypto_ec * | e, |
const struct crypto_ec_point * | p | ||
) |
Check whether EC point is neutral element.
e | EC context from crypto_ec_init() |
p | EC point |
int crypto_ec_point_is_on_curve | ( | struct crypto_ec * | e, |
const struct crypto_ec_point * | p | ||
) |
Check whether EC point is on curve.
e | EC context from crypto_ec_init() |
p | EC point |
int crypto_ec_point_mul | ( | struct crypto_ec * | e, |
const struct crypto_ec_point * | p, | ||
const struct crypto_bignum * | b, | ||
struct crypto_ec_point * | res | ||
) |
res = b * p
e | EC context from crypto_ec_init() |
p | EC point |
b | Bignum |
res | EC point; used to store the result of b * p |
int crypto_ec_point_solve_y_coord | ( | struct crypto_ec * | e, |
struct crypto_ec_point * | p, | ||
const struct crypto_bignum * | x, | ||
int | y_bit | ||
) |
Solve y coordinate for an x coordinate.
e | EC context from crypto_ec_init() |
p | EC point to use for the returning the result |
x | x coordinate |
y_bit | y-bit (0 or 1) for selecting the y value to use |
int crypto_ec_point_to_bin | ( | struct crypto_ec * | e, |
const struct crypto_ec_point * | point, | ||
u8 * | x, | ||
u8 * | y | ||
) |
Write EC point value as binary data.
e | EC context from crypto_ec_init() |
p | EC point data from crypto_ec_point_init() |
x | Buffer for writing the binary data for x coordinate or NULL if not used |
y | Buffer for writing the binary data for y coordinate or NULL if not used |
This function can be used to write an EC point as binary data in a format that has the x and y coordinates in big endian byte order fields padded to the length of the prime defining the group.
size_t crypto_ec_prime_len | ( | struct crypto_ec * | e | ) |
Get length of the prime in octets.
e | EC context from crypto_ec_init() |
size_t crypto_ec_prime_len_bits | ( | struct crypto_ec * | e | ) |
Get length of the prime in bits.
e | EC context from crypto_ec_init() |
int crypto_get_random | ( | void * | buf, |
size_t | len | ||
) |
Generate cryptographically strong pseudy-random bytes.
buf | Buffer for data |
len | Number of bytes to generate |
If the PRNG does not have enough entropy to ensure unpredictable byte sequence, this functions must return -1.
void crypto_global_deinit | ( | void | ) |
Deinitialize crypto wrapper.
This function is only used with internal TLSv1 implementation (CONFIG_TLS=internal). If that is not used, the crypto wrapper does not need to implement this.
int __must_check crypto_global_init | ( | void | ) |
Initialize crypto wrapper.
This function is only used with internal TLSv1 implementation (CONFIG_TLS=internal). If that is not used, the crypto wrapper does not need to implement this.
int crypto_hash_finish | ( | struct crypto_hash * | ctx, |
u8 * | hash, | ||
size_t * | len | ||
) |
Complete hash calculation.
ctx | Context pointer from crypto_hash_init() |
hash | Buffer for hash value or NULL if caller is just freeing the hash context |
len | Pointer to length of the buffer or NULL if caller is just freeing the hash context; on return, this is set to the actual length of the hash value |
This function calculates the hash value and frees the context buffer that was used for hash calculation.
This function is only used with internal TLSv1 implementation (CONFIG_TLS=internal). If that is not used, the crypto wrapper does not need to implement this.
struct crypto_hash* crypto_hash_init | ( | enum crypto_hash_alg | alg, |
const u8 * | key, | ||
size_t | key_len | ||
) |
Initialize hash/HMAC function.
alg | Hash algorithm |
key | Key for keyed hash (e.g., HMAC) or NULL if not needed |
key_len | Length of the key in bytes |
This function is only used with internal TLSv1 implementation (CONFIG_TLS=internal). If that is not used, the crypto wrapper does not need to implement this.
void crypto_hash_update | ( | struct crypto_hash * | ctx, |
const u8 * | data, | ||
size_t | len | ||
) |
Add data to hash calculation.
ctx | Context pointer from crypto_hash_init() |
data | Data buffer to add |
len | Length of the buffer |
This function is only used with internal TLSv1 implementation (CONFIG_TLS=internal). If that is not used, the crypto wrapper does not need to implement this.
int __must_check crypto_mod_exp | ( | const u8 * | base, |
size_t | base_len, | ||
const u8 * | power, | ||
size_t | power_len, | ||
const u8 * | modulus, | ||
size_t | modulus_len, | ||
u8 * | result, | ||
size_t * | result_len | ||
) |
Modular exponentiation of large integers.
base | Base integer (big endian byte array) |
base_len | Length of base integer in bytes |
power | Power integer (big endian byte array) |
power_len | Length of power integer in bytes |
modulus | Modulus integer (big endian byte array) |
modulus_len | Length of modulus integer in bytes |
result | Buffer for the result |
result_len | Result length (max buffer size on input, real len on output) |
This function calculates result = base ^ power mod modulus. modules_len is used as the maximum size of modulus buffer. It is set to the used size on success.
This function is only used with internal TLSv1 implementation (CONFIG_TLS=internal). If that is not used, the crypto wrapper does not need to implement this.
int __must_check crypto_private_key_decrypt_pkcs1_v15 | ( | struct crypto_private_key * | key, |
const u8 * | in, | ||
size_t | inlen, | ||
u8 * | out, | ||
size_t * | outlen | ||
) |
Private key decryption (PKCS #1 v1.5)
key | Private key |
in | Encrypted buffer |
inlen | Length of encrypted buffer in bytes |
out | Output buffer for encrypted data |
outlen | Length of output buffer in bytes; set to used length on success |
This function is only used with internal TLSv1 implementation (CONFIG_TLS=internal). If that is not used, the crypto wrapper does not need to implement this.
void crypto_private_key_free | ( | struct crypto_private_key * | key | ) |
Free private key.
key | Private key from crypto_private_key_import() |
This function is only used with internal TLSv1 implementation (CONFIG_TLS=internal). If that is not used, the crypto wrapper does not need to implement this.
struct crypto_private_key* crypto_private_key_import | ( | const u8 * | key, |
size_t | len, | ||
const char * | passwd | ||
) |
Import an RSA private key.
key | Key buffer (DER encoded RSA private key) |
len | Key buffer length in bytes |
passwd | Key encryption password or NULL if key is not encrypted |
This function is only used with internal TLSv1 implementation (CONFIG_TLS=internal). If that is not used, the crypto wrapper does not need to implement this.
int __must_check crypto_private_key_sign_pkcs1 | ( | struct crypto_private_key * | key, |
const u8 * | in, | ||
size_t | inlen, | ||
u8 * | out, | ||
size_t * | outlen | ||
) |
Sign with private key (PKCS #1)
key | Private key from crypto_private_key_import() |
in | Plaintext buffer |
inlen | Length of plaintext buffer in bytes |
out | Output buffer for encrypted (signed) data |
outlen | Length of output buffer in bytes; set to used length on success |
This function is only used with internal TLSv1 implementation (CONFIG_TLS=internal). If that is not used, the crypto wrapper does not need to implement this.
int __must_check crypto_public_key_decrypt_pkcs1 | ( | struct crypto_public_key * | key, |
const u8 * | crypt, | ||
size_t | crypt_len, | ||
u8 * | plain, | ||
size_t * | plain_len | ||
) |
Decrypt PKCS #1 signature.
key | Public key |
crypt | Encrypted signature data (using the private key) |
crypt_len | Encrypted signature data length |
plain | Buffer for plaintext (at least crypt_len bytes) |
plain_len | Plaintext length (max buffer size on input, real len on output); |
int __must_check crypto_public_key_encrypt_pkcs1_v15 | ( | struct crypto_public_key * | key, |
const u8 * | in, | ||
size_t | inlen, | ||
u8 * | out, | ||
size_t * | outlen | ||
) |
Public key encryption (PKCS #1 v1.5)
key | Public key |
in | Plaintext buffer |
inlen | Length of plaintext buffer in bytes |
out | Output buffer for encrypted data |
outlen | Length of output buffer in bytes; set to used length on success |
This function is only used with internal TLSv1 implementation (CONFIG_TLS=internal). If that is not used, the crypto wrapper does not need to implement this.
void crypto_public_key_free | ( | struct crypto_public_key * | key | ) |
Free public key.
key | Public key |
This function is only used with internal TLSv1 implementation (CONFIG_TLS=internal). If that is not used, the crypto wrapper does not need to implement this.
struct crypto_public_key* crypto_public_key_from_cert | ( | const u8 * | buf, |
size_t | len | ||
) |
Import an RSA public key from a certificate.
buf | DER encoded X.509 certificate |
len | Certificate buffer length in bytes |
This function can just return NULL if the crypto library does not support X.509 parsing. In that case, internal code will be used to parse the certificate and public key is imported using crypto_public_key_import().
This function is only used with internal TLSv1 implementation (CONFIG_TLS=internal). If that is not used, the crypto wrapper does not need to implement this.
struct crypto_public_key* crypto_public_key_import | ( | const u8 * | key, |
size_t | len | ||
) |
Import an RSA public key.
key | Key buffer (DER encoded RSA public key) |
len | Key buffer length in bytes |
This function can just return NULL if the crypto library supports X.509 parsing. In that case, crypto_public_key_from_cert() is used to import the public key from a certificate.
This function is only used with internal TLSv1 implementation (CONFIG_TLS=internal). If that is not used, the crypto wrapper does not need to implement this.
void des_encrypt | ( | const u8 * | clear, |
const u8 * | key, | ||
u8 * | cypher | ||
) |
Encrypt one block with DES.
clear | 8 octets (in) |
key | 7 octets (in) (no parity bits included) |
cypher | 8 octets (out) |
int __must_check fips186_2_prf | ( | const u8 * | seed, |
size_t | seed_len, | ||
u8 * | x, | ||
size_t | xlen | ||
) |
NIST FIPS Publication 186-2 change notice 1 PRF.
seed | Seed/key for the PRF |
seed_len | Seed length in bytes |
x | Buffer for PRF output |
xlen | Output length in bytes |
This function implements random number generation specified in NIST FIPS Publication 186-2 for EAP-SIM. This PRF uses a function that is similar to SHA-1, but has different message padding.
int md4_vector | ( | size_t | num_elem, |
const u8 * | addr[], | ||
const size_t * | len, | ||
u8 * | mac | ||
) |
MD4 hash for data vector.
num_elem | Number of elements in the data vector |
addr | Pointers to the data areas |
len | Lengths of the data blocks |
mac | Buffer for the hash |
int md5_vector | ( | size_t | num_elem, |
const u8 * | addr[], | ||
const size_t * | len, | ||
u8 * | mac | ||
) |
MD5 hash for data vector.
num_elem | Number of elements in the data vector |
addr | Pointers to the data areas |
len | Lengths of the data blocks |
mac | Buffer for the hash |
num_elem | Number of elements in the data vector |
addr | Pointers to the data areas |
len | Lengths of the data blocks |
mac | Buffer for the hash |
int rc4_skip | ( | const u8 * | key, |
size_t | keylen, | ||
size_t | skip, | ||
u8 * | data, | ||
size_t | data_len | ||
) |
XOR RC4 stream to given data with skip-stream-start.
key | RC4 key |
keylen | RC4 key length |
skip | number of bytes to skip from the beginning of the RC4 stream |
data | data to be XOR'ed with RC4 stream |
data_len | buf length |
Generate RC4 pseudo random stream for the given key, skip beginning of the stream, and XOR the end result with the data buffer to perform RC4 encryption/decryption.
int sha1_vector | ( | size_t | num_elem, |
const u8 * | addr[], | ||
const size_t * | len, | ||
u8 * | mac | ||
) |
SHA-1 hash for data vector.
num_elem | Number of elements in the data vector |
addr | Pointers to the data areas |
len | Lengths of the data blocks |
mac | Buffer for the hash |
int sha256_vector | ( | size_t | num_elem, |
const u8 * | addr[], | ||
const size_t * | len, | ||
u8 * | mac | ||
) |
SHA256 hash for data vector.
num_elem | Number of elements in the data vector |
addr | Pointers to the data areas |
len | Lengths of the data blocks |
mac | Buffer for the hash |
num_elem | Number of elements in the data vector |
addr | Pointers to the data areas |
len | Lengths of the data blocks |
mac | Buffer for the hash |