Browse Source

Rewrite arrayOfBytes<T> to not use NSData

Marcin Krzyżanowski 11 years ago
parent
commit
2a5e56c2cd
2 changed files with 13 additions and 8 deletions
  1. 11 5
      CryptoSwift/Generics.swift
  2. 2 3
      CryptoSwiftTests/ExtensionsTest.swift

+ 11 - 5
CryptoSwift/Generics.swift

@@ -55,14 +55,20 @@ func integerWithBytes<T: IntegerType>(bytes: [Byte]) -> T {
 
 /** array of bytes, little-endian representation */
 func arrayOfBytes<T>(value:T, totalBytes:Int) -> [Byte] {
-    var bytes = [Byte](count: totalBytes, repeatedValue: 0)
-    var data = NSData(bytes: [value] as [T], length: min(sizeof(T),totalBytes))
+    var valuePointer = UnsafeMutablePointer<T>.alloc(1)
+
+    var val = value
+    valuePointer.initializeFrom(&val, count: 1)
     
-    // then convert back to bytes, byte by byte
-    for i in 0..<data.length {
-        data.getBytes(&bytes[totalBytes - 1 - i], range:NSRange(location:i, length:sizeof(Byte)))
+    var bytesPointer = UnsafeMutablePointer<Byte>(valuePointer)
+    var bytes = [Byte](count: totalBytes, repeatedValue: 0)
+    for j in 0..<min(sizeof(T),totalBytes) {
+        bytes[totalBytes - 1 - j] = (bytesPointer + j).memory
     }
     
+    valuePointer.destroy()
+    valuePointer.dealloc(1)
+    
     return bytes
 }
 

+ 2 - 3
CryptoSwiftTests/ExtensionsTest.swift

@@ -52,8 +52,8 @@ class ExtensionsTest: XCTestCase {
         var i:UInt32 = 1
         XCTAssert(i &<< 1 == 2, "shift left failed")
         XCTAssert(i &<< 8 == 256, "shift left failed")
-        XCTAssert(i &<< 32 == 2147483648, "shift left failed")
-        XCTAssert(i &<< 33 == 2147483648, "shift left failed")
+        XCTAssert(i &<< 31 == i << 31, "shift left failed")
+        XCTAssert(i &<< 32 == 0, "shift left failed")
 
         // Signed
         var ii:Int = 21
@@ -65,7 +65,6 @@ class ExtensionsTest: XCTestCase {
         var iii:UInt32 = 21
         XCTAssert(iii &<< 1 == iii << 1, "shift left failed")
         XCTAssert(iii &<< 8 == iii << 8, "shift left failed")
-        XCTAssert(iii &<< ((sizeofValue(iii) * 8) - 1) == iii << ((sizeofValue(iii) * 8) - 1), "shift left failed")
         XCTAssert((iii &<< 32) == 0, "shift left failed")
 
     }