1f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* LibTomCrypt, modular cryptographic library -- Tom St Denis 2f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * 3f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * LibTomCrypt is a library that provides various cryptographic 4f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * algorithms in a highly modular and flexible manner. 5f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * 6f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * The library is free for all purposes without any express 7f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * guarantee it works. 8f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * 9f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com 10f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project */ 11f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#include "tomcrypt.h" 12f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 13f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/** 14f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project @file pkcs_1_i2osp.c 15f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project Integer to Octet I2OSP, Tom St Denis 16f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project*/ 17f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 18f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef PKCS_1 19f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 20f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* always stores the same # of bytes, pads with leading zero bytes 21f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project as required 22f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project */ 23f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 24f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/** 25f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project PKCS #1 Integer to binary 26f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project @param n The integer to store 27f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project @param modulus_len The length of the RSA modulus 28f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project @param out [out] The destination for the integer 29f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project @return CRYPT_OK if successful 30f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project*/ 31f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectint pkcs_1_i2osp(void *n, unsigned long modulus_len, unsigned char *out) 32f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 33f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project unsigned long size; 34f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 35f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project size = mp_unsigned_bin_size(n); 36f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 37f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if (size > modulus_len) { 38f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return CRYPT_BUFFER_OVERFLOW; 39f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 40f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 41f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project /* store it */ 42f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project zeromem(out, modulus_len); 43f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return mp_to_unsigned_bin(n, out+(modulus_len-size)); 44f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 45f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 46f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif /* PKCS_1 */ 47f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 48f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 49f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* $Source: /cvs/libtom/libtomcrypt/src/pk/pkcs1/pkcs_1_i2osp.c,v $ */ 50f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* $Revision: 1.5 $ */ 51f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* $Date: 2006/03/31 14:15:35 $ */ 52