/* * Copyright (c) 2014, Airbitz, Inc. * All rights reserved. * * See the LICENSE file for more information. */ #include "native-crypto.h" extern "C" { #include "crypto_scrypt.h" #include "base64.h" } #include #include #include #define COMPRESSED_PUBKEY_LENGTH 33 #define DECOMPRESSED_PUBKEY_LENGTH 65 #define PRIVKEY_LENGTH 64 int fast_crypto_scrypt (const uint8_t *passwd, size_t passwdlen, const uint8_t *salt, size_t saltlen, uint64_t N, uint32_t r, uint32_t p, uint8_t *buf, size_t buflen) { return crypto_scrypt(passwd, passwdlen, salt, saltlen, N, r, p, buf, buflen); } int crypto_scrypt_base64(std::string *password, std::string *salt, uint64_t N, uint32_t r, uint32_t p, size_t size, std::string *value) { char *szPassword = const_cast(password->c_str()); size_t passwordBufSize = Base64decode_len(szPassword); char *szSalt = const_cast(salt->c_str()); size_t saltBufSize = Base64decode_len(szSalt); auto *passwordBuf = (unsigned char *) malloc(sizeof(char) * passwordBufSize); auto *saltBuf = (unsigned char *) malloc(sizeof(char) * saltBufSize); int passwordBufLen = Base64decode((char *)passwordBuf, szPassword); int saltBufLen = Base64decode((char *)saltBuf, szSalt); auto *buffer = (uint8_t *) malloc(sizeof(char) * size); int result = fast_crypto_scrypt((uint8_t *) passwordBuf, passwordBufLen, (uint8_t *) saltBuf, saltBufLen, N, r, p, buffer, size); int b64encSize = Base64encode_len(size); char *szB64Encoded = (char *)malloc(sizeof(char) * b64encSize); int b64encLen = Base64encode(szB64Encoded, (const char *) buffer, size); value->assign(szB64Encoded); free(buffer); free(szB64Encoded); free(passwordBuf); free(saltBuf); return result; }