/* Copyright (c) 2010 The Chromium OS Authors. All rights reserved. * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * * Utility functions for message digest functions. */ #include "padding.h" #include "rsa_utility.h" #include "utility.h" int RSAProcessedKeySize(int algorithm) { int key_len = siglen_map[algorithm] * sizeof(uint32_t); /* Key length in * bytes. */ /* Total size needed by a RSAPublicKey structure is = * 2 * key_len bytes for the n and rr arrays * + sizeof len + sizeof n0inv. */ return (2 * key_len + sizeof(int) + sizeof(uint32_t)); } RSAPublicKey* RSAPublicKeyFromBuf(uint8_t* buf, int len) { RSAPublicKey* key = (RSAPublicKey*) Malloc(sizeof(RSAPublicKey)); MemcpyState st; int key_len; st.remaining_buf = buf; st.remaining_len = len; StatefulMemcpy(&st, &key->len, sizeof(key->len)); key_len = key->len * sizeof(uint32_t); /* key length in bytes. */ key->n = (uint32_t*) Malloc(key_len); key->rr = (uint32_t*) Malloc(key_len); StatefulMemcpy(&st, &key->n0inv, sizeof(key->n0inv)); StatefulMemcpy(&st, key->n, key_len); StatefulMemcpy(&st, key->rr, key_len); if (st.remaining_len != 0) { /* Underrun or overrun. */ Free(key->n); Free(key->rr); Free(key); return NULL; } return key; }