|
|
@@ -83,18 +83,15 @@ int htob64(char *h, char *d, unsigned int l){
|
|
|
return strlen(d);
|
|
|
}
|
|
|
|
|
|
+static BIGNUM* b_prime = NULL;
|
|
|
+static BIGNUM* b_generator = NULL;
|
|
|
|
|
|
-// ### new sophie-germain 1080bit prime number ###
|
|
|
-//static const char *prime1080 = "++ECLiPSE+is+proud+to+present+latest+FiSH+release+featuring+even+more+security+for+you+++shouts+go+out+to+TMG+for+helping+to+generate+this+cool+sophie+germain+prime+number++++/C32L";
|
|
|
-static const char *prime1080 = "FBE1022E23D213E8ACFA9AE8B9DFADA3EA6B7AC7A7B7E95AB5EB2DF858921FEADE95E6AC7BE7DE6ADBAB8A783E7AF7A7FA6A2B7BEB1E72EAE2B72F9FA2BFB2A2EFBEFAC868BADB3E828FA8BADFADA3E4CC1BE7E8AFE85E9698A783EB68FA07A77AB6AD7BEB618ACF9CA2897EB28A6189EFA07AB99A8A7FA9AE299EFA7BA66DEAFEFBEFBF0B7D8B";
|
|
|
-
|
|
|
-// Base16: FBE1022E23D213E8ACFA9AE8B9DFADA3EA6B7AC7A7B7E95AB5EB2DF858921FEADE95E6AC7BE7DE6ADBAB8A783E7AF7A7FA6A2B7BEB1E72EAE2B72F9FA2BFB2A2EFBEFAC868BADB3E828FA8BADFADA3E4CC1BE7E8AFE85E9698A783EB68FA07A77AB6AD7BEB618ACF9CA2897EB28A6189EFA07AB99A8A7FA9AE299EFA7BA66DEAFEFBEFBF0B7D8B
|
|
|
-// Base10: 12745216229761186769575009943944198619149164746831579719941140425076456621824834322853258804883232842877311723249782818608677050956745409379781245497526069657222703636504651898833151008222772087491045206203033063108075098874712912417029101508315117935752962862335062591404043092163187352352197487303798807791605274487594646923
|
|
|
-
|
|
|
-
|
|
|
-void DH1080_gen(bd::String& privateKey, bd::String& publicKeyB64) {
|
|
|
- BIGNUM *b_prime = NULL;
|
|
|
- BIGNUM *b_generator = NULL;
|
|
|
+void DH1080_init() {
|
|
|
+ // ### new sophie-germain 1080bit prime number ###
|
|
|
+ //const char *prime1080 = "++ECLiPSE+is+proud+to+present+latest+FiSH+release+featuring+even+more+security+for+you+++shouts+go+out+to+TMG+for+helping+to+generate+this+cool+sophie+germain+prime+number++++/C32L";
|
|
|
+ // Base16: FBE1022E23D213E8ACFA9AE8B9DFADA3EA6B7AC7A7B7E95AB5EB2DF858921FEADE95E6AC7BE7DE6ADBAB8A783E7AF7A7FA6A2B7BEB1E72EAE2B72F9FA2BFB2A2EFBEFAC868BADB3E828FA8BADFADA3E4CC1BE7E8AFE85E9698A783EB68FA07A77AB6AD7BEB618ACF9CA2897EB28A6189EFA07AB99A8A7FA9AE299EFA7BA66DEAFEFBEFBF0B7D8B
|
|
|
+ // Base10: 12745216229761186769575009943944198619149164746831579719941140425076456621824834322853258804883232842877311723249782818608677050956745409379781245497526069657222703636504651898833151008222772087491045206203033063108075098874712912417029101508315117935752962862335062591404043092163187352352197487303798807791605274487594646923
|
|
|
+ const char *prime1080 = "FBE1022E23D213E8ACFA9AE8B9DFADA3EA6B7AC7A7B7E95AB5EB2DF858921FEADE95E6AC7BE7DE6ADBAB8A783E7AF7A7FA6A2B7BEB1E72EAE2B72F9FA2BFB2A2EFBEFAC868BADB3E828FA8BADFADA3E4CC1BE7E8AFE85E9698A783EB68FA07A77AB6AD7BEB618ACF9CA2897EB28A6189EFA07AB99A8A7FA9AE299EFA7BA66DEAFEFBEFBF0B7D8B";
|
|
|
|
|
|
if (!BN_hex2bn(&b_prime, prime1080)) {
|
|
|
sdprintf("BAD PRIME");
|
|
|
@@ -105,12 +102,14 @@ void DH1080_gen(bd::String& privateKey, bd::String& publicKeyB64) {
|
|
|
sdprintf("BAD GENERATOR");
|
|
|
return;
|
|
|
}
|
|
|
+}
|
|
|
|
|
|
+void DH1080_gen(bd::String& privateKey, bd::String& publicKeyB64) {
|
|
|
DH *dh = NULL;
|
|
|
|
|
|
dh = DH_new();
|
|
|
- dh->p = b_prime;
|
|
|
- dh->g = b_generator;
|
|
|
+ dh->p = BN_dup(b_prime);
|
|
|
+ dh->g = BN_dup(b_generator);
|
|
|
|
|
|
if (!DH_generate_key(dh)) {
|
|
|
DH_free(dh);
|
|
|
@@ -134,18 +133,6 @@ void DH1080_gen(bd::String& privateKey, bd::String& publicKeyB64) {
|
|
|
}
|
|
|
|
|
|
bool DH1080_comp(const bd::String privateKey, const bd::String theirPublicKeyB64, bd::String& sharedKey) {
|
|
|
- BIGNUM *b_prime = NULL, *b_generator = NULL;
|
|
|
-
|
|
|
- if (!BN_hex2bn(&b_prime, prime1080)) {
|
|
|
- sharedKey = "Bad prime";
|
|
|
- return false;
|
|
|
- }
|
|
|
-
|
|
|
- if (!BN_dec2bn(&b_generator, "2")) {
|
|
|
- sharedKey = "Bad generator";
|
|
|
- return false;
|
|
|
- }
|
|
|
-
|
|
|
size_t len = 0;
|
|
|
unsigned char raw_buf[200] = "";
|
|
|
BIGNUM *b_myPrivkey = NULL, *b_HisPubkey = NULL;
|
|
|
@@ -153,8 +140,8 @@ bool DH1080_comp(const bd::String privateKey, const bd::String theirPublicKeyB64
|
|
|
|
|
|
|
|
|
dh = DH_new();
|
|
|
- dh->p = b_prime;
|
|
|
- dh->g = b_generator;
|
|
|
+ dh->p = BN_dup(b_prime);
|
|
|
+ dh->g = BN_dup(b_generator);
|
|
|
|
|
|
// Setup my private key
|
|
|
b_myPrivkey = BN_bin2bn(reinterpret_cast<const unsigned char*>(privateKey.data()), privateKey.length(), NULL);
|