static int s2n_ecdsa_keys_match(const struct s2n_pkey *pub, const struct s2n_pkey *priv) { uint8_t input[16] = { 1 }; DEFER_CLEANUP(struct s2n_blob signature = { 0 }, s2n_free); DEFER_CLEANUP(struct s2n_hash_state state_in = { 0 }, s2n_hash_free); DEFER_CLEANUP(struct s2n_hash_state state_out = { 0 }, s2n_hash_free); /* s2n_hash_new only allocates memory when using high-level EVP hashes, currently restricted to FIPS mode. */ GUARD(s2n_hash_new(&state_in)); GUARD(s2n_hash_new(&state_out)); GUARD(s2n_hash_init(&state_in, S2N_HASH_SHA1)); GUARD(s2n_hash_init(&state_out, S2N_HASH_SHA1)); GUARD(s2n_hash_update(&state_in, input, sizeof(input))); GUARD(s2n_hash_update(&state_out, input, sizeof(input))); GUARD(s2n_alloc(&signature, s2n_ecdsa_der_signature_size(priv))); GUARD(s2n_ecdsa_sign(priv, &state_in, &signature)); GUARD(s2n_ecdsa_verify(pub, &state_out, &signature)); return 0; }
struct s2n_map *s2n_map_new() { struct s2n_blob mem; struct s2n_map *map; GUARD_PTR(s2n_alloc(&mem, sizeof(struct s2n_map))); map = (void *) mem.data; map->capacity = 0; map->size = 0; map->immutable = 0; map->table = NULL; GUARD_PTR(s2n_hash_new(&map->sha256)); GUARD_PTR(s2n_hash_init(&map->sha256, S2N_HASH_SHA256)); GUARD_PTR(s2n_map_embiggen(map, S2N_INITIAL_TABLE_SIZE)); return map; }