Guest User

Untitled

a guest
Apr 25th, 2018
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.47 KB | None | 0 0
  1. let testBundle = Bundle(for: type(of: self))
  2.  
  3. guard let textUrl = testBundle.url(forResource: "test_message", withExtension: "txt"),
  4. let signingKeyUrl = testBundle.url(forResource: "key", withExtension: "pem"),
  5. let signingCertUrl = testBundle.url(forResource: "cert", withExtension: "pem") else {
  6. exit(1)
  7. }
  8.  
  9. let certFileObject = signingCertUrl.path.withCString { filePtr in
  10. return fopen(filePtr, "rb")
  11. }
  12. defer {
  13. fclose(certFileObject)
  14. }
  15.  
  16. let keyFileObject = signingKeyUrl.path.withCString { filePtr in
  17. return fopen(filePtr, "rb")
  18. }
  19. defer {
  20. fclose(keyFileObject)
  21. }
  22.  
  23. guard let key = PEM_read_PrivateKey(keyFileObject, nil, nil, nil),
  24. let cert = PEM_read_X509(certFileObject, nil, nil, nil) else {
  25. exit(1)
  26. }
  27.  
  28. OpenSSL_add_all_ciphers()
  29. OpenSSL_add_all_digests()
  30. OPENSSL_add_all_algorithms_conf()
  31.  
  32. guard let textData = FileManager.default.contents(atPath: textUrl.path) else {
  33. print("Unable to read text file")
  34. exit(1)
  35. }
  36.  
  37. guard let textBIO = BIO_new(BIO_s_mem()) else {
  38. print("Unable to create textBIO")
  39. exit(1)
  40. }
  41.  
  42. _ = textData.withUnsafeBytes({dataBytes in
  43. BIO_write(textBIO, dataBytes, Int32(textData.count))
  44. })
  45.  
  46. guard let cms = CMS_sign(cert, key, nil, textBIO, UInt32(CMS_BINARY)) else {
  47. print("Unale to sign data")
  48. exit(1)
  49. }
  50.  
  51. print("cms : \(cms)")
  52.  
  53. let store = X509_STORE_new()
  54. X509_STORE_add_cert(store, cert)
  55.  
  56. let outBIO = BIO_new(BIO_s_mem())
  57. let result = CMS_verify(cms, nil, store, nil, outBIO, 0)
  58. print("result : \(result)")
  59.  
  60. if result != 1 {
  61. ERR_print_errors(outBIO!)
  62. // let errorCode: UInt = ERR_get_error()
  63. // print("ERROR : \(String(format: "%2X", errorCode))")
  64. }
  65.  
  66. var ptr = UnsafeRawPointer(bitPattern: 1)!
  67. let cnt = BIO_ctrl(outBIO, BIO_CTRL_INFO, 1, &ptr)
  68.  
  69. // Create data from pointer and count:
  70. let outBIOData = Data(bytes: ptr, count: cnt)
  71. let outBIOStr = String(data: outBIOData, encoding: .utf8)
  72.  
  73. print("outBIOStr : \(String(describing: outBIOStr))")
Add Comment
Please, Sign In to add comment