Răsfoiți Sursa

Bignum operators +-*/

Marcin Krzyżanowski 11 ani în urmă
părinte
comite
a2209b8a0b
2 a modificat fișierele cu 43 adăugiri și 3 ștergeri
  1. 1 0
      CryptoSwift-Bridging-Header.h
  2. 42 3
      CryptoSwift/Bignum.swift

+ 1 - 0
CryptoSwift-Bridging-Header.h

@@ -18,4 +18,5 @@
 #include <openssl/blowfish.h>
 #include <openssl/blowfish.h>
 
 
 #include <openssl/bn.h>
 #include <openssl/bn.h>
+#include <openssl/ossl_typ.h>
 
 

+ 42 - 3
CryptoSwift/Bignum.swift

@@ -22,11 +22,16 @@ class Bignum {
         BN_init(bignumPointer)
         BN_init(bignumPointer)
     }
     }
     
     
-    convenience init(bignum: Bignum) {
+    convenience init(_ bignum: Bignum) {
         self.init();
         self.init();
         self.bignumPointer = BN_dup(bignum.bignumPointer);
         self.bignumPointer = BN_dup(bignum.bignumPointer);
     }
     }
     
     
+    convenience init(_ pointer: UnsafePointer<BIGNUM>) {
+        self.init();
+        self.bignumPointer = BN_dup(pointer);
+    }
+    
     convenience init(data: NSData) {
     convenience init(data: NSData) {
         self.init();
         self.init();
         var constPointerToBytes = CConstPointer<CUnsignedChar>(data, data.bytes.value)
         var constPointerToBytes = CConstPointer<CUnsignedChar>(data, data.bytes.value)
@@ -42,7 +47,7 @@ class Bignum {
     }
     }
     
     
     func copy() -> AnyObject! {
     func copy() -> AnyObject! {
-        let copied:Bignum = Bignum(bignum: self)
+        let copied:Bignum = Bignum(self)
         return copied
         return copied
     }
     }
     
     
@@ -50,4 +55,38 @@ class Bignum {
         BN_clear_free(bignumPointer);
         BN_clear_free(bignumPointer);
         bignumPointer.destroy()
         bignumPointer.destroy()
     }
     }
-}
+}
+
+@infix func + (left: Bignum, right: Bignum) -> Bignum {
+    var resultPointer = UnsafePointer<BIGNUM>.alloc(sizeof(BIGNUM))
+    BN_add(resultPointer,left.bignumPointer, right.bignumPointer);
+    return Bignum(resultPointer)
+}
+
+@infix func - (left: Bignum, right: Bignum) -> Bignum {
+    var resultPointer = UnsafePointer<BIGNUM>.alloc(sizeof(BIGNUM))
+    BN_sub(resultPointer,left.bignumPointer, right.bignumPointer);
+    return Bignum(resultPointer)
+}
+
+@infix func * (left: Bignum, right: Bignum) -> Bignum {
+    var resultPointer = UnsafePointer<BIGNUM>.alloc(sizeof(BIGNUM))
+    var ctx:COpaquePointer = BN_CTX_new();
+    BN_CTX_init(ctx)
+    
+    BN_mul(resultPointer,left.bignumPointer, right.bignumPointer, ctx);
+    BN_CTX_free(ctx)
+    
+    return Bignum(resultPointer)
+}
+
+@infix func / (left: Bignum, right: Bignum) -> Bignum {
+    var resultPointer = UnsafePointer<BIGNUM>.alloc(sizeof(BIGNUM))
+    var ctx:COpaquePointer = BN_CTX_new();
+    BN_CTX_init(ctx)
+    
+    BN_div(resultPointer, nil, left.bignumPointer, right.bignumPointer, ctx);
+    BN_CTX_free(ctx)
+    
+    return Bignum(resultPointer)
+}