Verifying key

parent f5fe6ddd
......@@ -3,6 +3,7 @@
//
#define GMP_WITH_SGX
#include <string.h>
#include <cstdint>
#include "../sgxwallet_common.h"
......@@ -27,7 +28,7 @@ std::string *stringFromKey(libff::alt_bn128_Fr *_key) {
return new std::string(tmp);
}
std::string *stringFromFq(libff::alt_bn128_Fq*_fq) {
std::string *stringFromFq(libff::alt_bn128_Fq *_fq) {
mpz_t t;
mpz_init(t);
......@@ -52,53 +53,72 @@ std::string *stringFromG1(libff::alt_bn128_G1 *_g1) {
auto sG1 = new std::string(*sX + ":" + *sY);
delete(sX);
delete(sY);
delete (sX);
delete (sY);
return sG1;
}
libff::alt_bn128_Fr *keyFromString(const char *_keyString) {
return new libff::alt_bn128_Fr(_keyString);
}
void check_key(int *err_status, char *err_string, const char *_keyString) {
libff::alt_bn128_Fr *keyFromString(const char* _keyString) {
*err_status = UNKNOWN_ERROR;
return new libff::alt_bn128_Fr(_keyString);
}
uint64_t keyLen = strnlen(_keyString, MAX_KEY_LENGTH);
// check that key is zero terminated string
if (keyLen == MAX_KEY_LENGTH) {
*err_status = PLAINTEXT_KEY_TOO_LONG;
snprintf(err_string, MAX_ERR_LEN, "Plaintext key too long");
return;
}
bool check_key(const char *_keyString) {
libff::init_alt_bn128_params();
if (_keyString == nullptr)
return false;
if (_keyString == nullptr) {
*err_status = NULL_KEY;
snprintf(err_string, BUF_LEN, "Null key string");
return;
}
for (int i = keyLen; i < MAX_KEY_LENGTH; i++) {
if (_keyString[i] != 0) {
*err_status = UNPADDED_KEY;
snprintf(err_string, BUF_LEN, "Unpadded key passed to wrap");
return;
}
}
std::string ks(_keyString);
// std::string keyString =
// "4160780231445160889237664391382223604184857153814275770598791864649971919844";
// std::string keyString =
// "4160780231445160889237664391382223604184857153814275770598791864649971919844";
auto key = keyFromString(ks.c_str());
auto s1 = stringFromKey(key);
if (s1->compare(ks) != 0)
return false;
if (s1->size() < 10)
return false;
if (s1->compare(ks) != 0) {
*err_status = INCORRECT_STRING_CONVERSION;
snprintf(err_string, BUF_LEN, "Incorrect string conversion");
return;
}
if (s1->size() >= 100)
return false;
*err_status = 0;
return true;
}
bool sign(const char *_keyString, const char* _hashXString, const char* _hashYString,
bool sign(const char *_keyString, const char *_hashXString, const char *_hashYString,
char sig[BUF_LEN]) {
auto key = keyFromString(_keyString);
......@@ -126,7 +146,6 @@ bool sign(const char *_keyString, const char* _hashXString, const char* _hashYSt
return true;
}
......
......@@ -13,7 +13,7 @@
#define EXTERNC
#endif
EXTERNC bool check_key(const char* _keyString);
EXTERNC void check_key(int *err_status, char *err_string, const char* _keyString);
EXTERNC bool sign(const char *_keyString, const char* _hashXString, const char* _hashYString,
char* _sig);
......
......@@ -50,6 +50,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "../sgxwallet_common.h"
void *(*gmp_realloc_func)(void *, size_t, size_t);
void *(*oc_realloc_func)(void *, size_t, size_t);
void (*gmp_free_func)(void *, size_t);
......@@ -120,32 +122,12 @@ void generate_ecdsa_key(int *err_status, char *err_string,
void encrypt_key(int *err_status, char *err_string, char *key,
uint8_t *encrypted_key, uint32_t *enc_len) {
*err_status = -1;
uint64_t keyLen = strnlen(key, MAX_KEY_LENGTH);
*err_status = UNKNOWN_ERROR;
// check that key is zero terminated string
check_key(err_status, err_string, key);
if (keyLen == MAX_KEY_LENGTH) {
snprintf(err_string, MAX_ERR_LEN, "keyLen != MAX_KEY_LENGTH");
return;
}
*err_status = -2;
// check that key is padded with 0s
for (int i = keyLen; i < MAX_KEY_LENGTH; i++) {
if (key[i] != 0) {
snprintf(err_string, BUF_LEN,"Unpadded key");
return;
}
}
*err_status = -3;
if (!check_key(key)) {
snprintf(err_string, BUF_LEN,"check_key failed");
if (*err_status != 0) {
snprintf(err_string + strlen(err_string), BUF_LEN,":check_key failed");
return;
}
......
......@@ -27,5 +27,13 @@
#define ADD_ENTROPY_SIZE 32
#define UNKNOWN_ERROR -1
#define PLAINTEXT_KEY_TOO_LONG -2
#define UNPADDED_KEY -3
#define NULL_KEY -4
#define INCORRECT_STRING_CONVERSION -5
#endif //SGXWALLET_SGXWALLET_COMMON_H
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment