-
-
Save gr33n7007h/813a7b47f17ed207cd65d1a5fd6d6e03 to your computer and use it in GitHub Desktop.
blah
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require 'fiddle/import' | |
### TESTING ### | |
module Auth | |
extend(Fiddle::Importer) | |
dlload('/usr/local/lib/libmonocypher.so.2') | |
typealias('u8', 'unsigned char') | |
# External bindings | |
extern <<-__C__ | |
void | |
crypto_lock(u8 *mac, | |
u8 *ciphertext, | |
u8 *key, | |
u8 *nonce, | |
u8 *plaintext, | |
size_t textsize) | |
__C__ | |
# | |
extern <<-__C__ | |
int | |
crypto_unlock(u8 *plaintext, | |
u8 *key, | |
u8 *nonce, | |
u8 *mac, | |
u8 *ciphertext, | |
size_t textsize) | |
__C__ | |
def self.encrypt(k, n, msg) | |
mac = Array.new(16, 0).pack('C*') | |
ct = Array.new(msg.bytesize, 0).pack('C*') | |
crypto_lock(mac, ct, k, n, msg, msg.bytesize) | |
mac << ct | |
end | |
def self.decrypt(k, n, msg) | |
mac = msg[0..15] | |
msg = msg[16..] | |
pt = Array.new(msg.bytesize, 0).pack('C*') | |
status = crypto_unlock(pt, k, n, mac, msg, msg.bytesize) | |
if status == 0 | |
pt # leave as binary or encode? | |
else | |
raise "corrupted message" | |
end | |
end | |
end | |
msg = DATA.tap { |d| d.rewind }.read | |
p "## PLAIN TEXT ##" | |
puts msg | |
key = Random.bytes(32) | |
iv = Random.bytes(24) | |
puts "## CIPHER TEXT ##" | |
cipher = Auth.encrypt(key, iv, msg) | |
p cipher | |
puts | |
puts "## PLAIN TEXT ##" | |
plain = Auth.decrypt(key, iv, cipher) | |
p plain | |
__END__ | |
🤠🤡🤢🤣🤤🤥🤦🤧🤨🤩🤪🤫🤬🤭🤮🤯 | |
¹²³€½¾{[]}@łe¶ŧ←↓→øþæßðđŋħł«»¢“”nµ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
"## PLAIN TEXT ##" | |
require 'fiddle/import' | |
### TESTING ### | |
module Auth | |
extend(Fiddle::Importer) | |
dlload('/usr/local/lib/libmonocypher.so.2') | |
typealias('u8', 'unsigned char') | |
# External bindings | |
extern <<-__C__ | |
void | |
crypto_lock(u8 *mac, | |
u8 *ciphertext, | |
u8 *key, | |
u8 *nonce, | |
u8 *plaintext, | |
size_t textsize) | |
__C__ | |
# | |
extern <<-__C__ | |
int | |
crypto_unlock(u8 *plaintext, | |
u8 *key, | |
u8 *nonce, | |
u8 *mac, | |
u8 *ciphertext, | |
size_t textsize) | |
__C__ | |
def self.encrypt(k, n, msg) | |
mac = Random.bytes(16) | |
ct = Array.new(msg.bytesize, 0).pack('C*') | |
crypto_lock(mac, ct, k, n, msg, msg.bytesize) | |
mac << ct | |
end | |
def self.decrypt(k, n, msg) | |
mac = msg[0..15] | |
msg = msg[16..] | |
pt = Array.new(msg.bytesize, 0).pack('C*') | |
status = crypto_unlock(pt, k, n, mac, msg, msg.bytesize) | |
if status == 0 | |
pt # leave as binary or encode? | |
else | |
raise "corrupted message" | |
end | |
end | |
end | |
msg = DATA.tap { |d| d.rewind }.read | |
p "## PLAIN TEXT ##" | |
puts msg | |
key = Random.bytes(32) | |
iv = Random.bytes(24) | |
puts "## CIPHER TEXT ##" | |
cipher = Auth.encrypt(key, iv, msg) | |
p cipher | |
puts | |
puts "## PLAIN TEXT ##" | |
plain = Auth.decrypt(key, iv, cipher) | |
p plain | |
__END__ | |
🤠🤡🤢🤣🤤🤥🤦🤧🤨🤩🤪🤫🤬🤭🤮🤯 | |
¹²³€½¾{[]}@łe¶ŧ←↓→øþæßðđŋħł«»¢“”nµ | |
## CIPHER TEXT ## | |
"\xA1\xE5(\xAD\x14\xF1\t\xE5z\xFD\x93\t\xAC\">\xEAy\xAA\xF7\xADA\xA1\xB0Z\x93\xBF\x19x\xCB\xAF\xA1\x02Rw\xD1\x0F}N\xE54\xA2\xCE3\x92\xF9\x85\xEF\xB5K\xE4\x88yhi,V\x9E]\xBA\xC2\x90R\x82\x96;\xE8!\xE8\xDA\x1C\x02?\b\xE5|i'\xE4\xD5\t\xD7\"B\x15S\x93\xA5\xC2i\x89\x82g^\xDB\x9F\xEA\x10\xE4\t\x10=\f\xC7\x1F6{M+.4\xFE\x92\x19\x16\x89\x19\x18\x9E_\x11xb\f\xB6\x04\xD5\x00|\x14\xFBSb\xC2\x0E\xFCK\xAA0\x8Bi3(\x90\xF09\x18I\x0E\xE4\xF2T;\x90\x93\xCBU\xBC\xE8\x04\xD0\xE9r\x8D\xB4I\x19\xB3f=R`x\x93\v\xAA&\x8F\xAB:|\xA7\xB3\x0F?T\xC7\xCDjFp\xA7$\xB0\xB8\xD9\x12\xC2iu\xA3k:Cp\x88\xA1\xD3X\x1E\x00\x98\x03\x10\x92\x12\x89\xAE\xBB\xCE\xDE\xB4\xB0\xBAct\xC0\xDA\xE0\v\xF83\xC44BU8\n\e$\xB9?\x92\xD02\x92\xAFM\xA5Z\xD2\x985}\\X\x88{\xEB\xDE\x0E\xFBI\xCFt\xC4\xDFs/\xBD\x7F\xC8\x81J,].\n=\x03\x11\xF1\xB7\x97\x00\x91$\xBE-\xCE\xC5@\x05L##\x83\xD6\xFE@q\xE0\xCB\x91@\xA6\"K.^l\x18Z\xCC\t\xC9\n0\n\xBC?\xEE\xFC\xEF\xA2\xEC\xDD\x10\x10\x85\\\x99\xE8z\xDD,a\xEDI\xFA\xE9\xC5\xF6\xEF\x7F\xEF\x9F\x82\x9C\xC1\x97YJ\xC4\xED\xB3k\"/C\x83B\xDD\xAB\xF9+\xC4\x9E\x1A\xD2m\xD9Mio\xB4.\x8A\x7F+\x85\f\xDE\xD3\xCC\x9D;\x9D\xFCM\xBA\xB0\f]\xCF\xE4e\x82\x04 \xFD~x;\xBEO\x01\xCD\x8D.\x90p\x82w\r2\xE0\xD1\xF6$\xB5\x1F\xF6\x9AD\xFF\xAC\x91\x9E\x10\x930L\x1A/\x90\xE1\x1F\v\x8B-AXc\xFD\xE8\xA5\xA0\x19O\xFF6\x97D\xBA\x116\xB0\x84\xC5\x88p\x17zw\x89n\x89\xCB\xEE\xDF\e\x88>\xDB\x86O.b\xAFA_DZkt\x98\aV\xDF\xE6T7\xB4S+9\x14T\xE1&\xC3<!4\x94R\x7F\x934gs\xFBU\x18\xFF\x84;\x8D\x9C\x97\xC2\xF8\x86Yf\xA1\xD3\xE2>$!!\xC2\xE20\xA14\xCB\xCE\r\xF1\xCFxV\am\xA5\x8F0[\t\xB3\xCFj\x8A\xB2\xC6Z\xB4h/Q\xDD\xCF#\xEE|m\xFC\x7F\xAA\x84V\xEB8MO\xE8\xDA\xC4\xE3+HN`\xE2\xAE#\xA3\x03K\xF8\x18\n->7\xC0DE\xCD\xFE\xCF\xA9\xDB\xE4\xC9\x8C\xF0Ri\xD9\xA7\xD0I4\xA2U(\x7F\x9Ca\x14\b\xFA\x8A\x11\xFC\x9Au\xFD\xE4\xE6\xB7\x1E7\xD4\x87=\xF10\xAEP\x91\xC42O?\x91#\x19\x81\xB7\xC9@\\\xB4c\xCE6\xB2\xECQ(\xCD\xB0\xB8\xC1\x96)\xB7BEN}\xD7tz;\x91\xB4\x8Cw\a\xA3%\x02#\xB6\xBF\x01\x88R\xB7+\x19\b\xA7|\eU\xD9E0\x8EfL\xEA\xAFeqx\xAB\x81\xE1+\xEC\xE8\xD9\xB1\xE0<\xFE\xB7x\xBA&+c\xEAW\xF3\xA0{~\xE7Vz\xB0\xFEO\xE9I3\xEA\x869q\x91\xA7\xD45<\xD6t}+&\x1Fb\x069\xFE\xCB\xC5\x85k\xE2y\f\xAA#\xB5X\xAAS\x01\xAB\xD76\x9A(\xBC<\xB8\xF03i\xC9\x14\xEB\x84\xDB\xD9\x0Fa\t\x9E\xBA\xC6\xB9\xEF\x00\x10\x9Dx\xFBk\x97%\"o\xBA8\xA2Q\xC1\x1FS\xAD\xB2\b\xA2\x9D+_k/\xF6\xBA\xEA\xFF\x01\xBER\xA9\x95\xD4%\xE1W\x9B9\x8A\xC1\xF9)\x1Dy\xEB\xBB\e\xF1\x12\r\xF6\xAF\xDEw\x1F\xFFg3\xE1\xFA{\xBCF\xE3\x8D6r\x1Dq \x939\xB5f\xBC\xB4\x80i\xF4+\x02\v\x97]\x1Dy$\xC0(\xF4@\xA3\xAFz\xED\xA8\xBBr\r+\x13\x87\x89\xAB\xD6\x16\xAE>\xC8\xE5\xD2\x83\xC2\x00\x1A\xE35\b\xD9\x03\xE6@!z!\x92\xBE\n\x14D\xC3 \x8B\xA2\x966\xDC\x15Z\xC0=x\x95\x92RL\xE2\xAA\xB9\xD4\xC2\x90_*p\xD5A\xF9\x19\xD4\x17BR4\v\xE4\xBA\xA2\xD0$\x83\xC3\xAA\xA1q\xF4N,\xE5f\x8D\xA8\x93\x92\x7F\xE6\xCC\xEB\x97\xF5\x92mH-\xA9\x01m\xAFQ<\x1F'Ah\xFF>\x94\xF3?E\xA5_dNM_\xB4\xC9ite\xBF\xB8\xDAe_\xFB\xD9\x00uZ\xB4,\xAFPO\x00W\x1D7\x905Gq\xD0W\xF5\e\x00\x9D\x18;\xDF\x1F\xDDM$\x97\x1C\x19\x82\xF3\f\x11\x14\"\x8FO4\xBC\xFCa\r\xC5\x11\xCA\xDB\xEB_p]\xD1mV\xE0f\x18\xE3\xC4\xDF\x89\xC6\xAF{\xF2:\xD8\xC0\xEF]\xFC\x9B\x0Ed\xBA\v9\xAA\x90[\x99\nWqI\xA0\x19\xE6\xB8N\xE1\xDB\xA02\xEA\x93\x8F\xBE&\xA7\x8E\x00\xABZM\fR:\x9D.\xF3\xB5\x9C',\x894\xE7\xA1\xDCi\xCBgh\xFB?\x8F\x0E\xAF4\x1C\x8A\x9F9\x1E\x94v\x93=\x90\x9C`~\xBB\xEB_I\xB8\x1C\x97\xE6i^gh\xC0\xD1\xC5\x17m^X\x00:\xC7\xB72\xD8M\xF6\xC4L\x04\xED\xAEjH\x9C\x1C\xC6s4@\xD8\xA1\xFDi\x1CVCN\x91\x9C1\xF6<b\xBF\xB3\x90\xEC\x85\xD2`\x86vk\x02\x87,\x9B\x86\x8Ev\xE6\x98\x87q\x8Fd\xA3\t\x98h\t\xD1v\xCB\x9D5\xE34\xEE\x918\xA4g\xF9*\xCB\xC70\x85\xAD\xF8B\xC0\xDA\xC5*\\\xBC\t\xE0\xA1\x19p\xC4\xAB\x89\x1E\xBD\xF3`/\x93*5\"\f\xFD\xF0\xB6\xBC\xDD\xDDy\xDB\xA3\xAAD\xA9y\xB9\xDD~\xC3\x12\x8Cj\xE0E\xFAT\xB0'\x90\"\xCA\x14\x7F\x18\xFC\x82\xF6\xDE\xD2\xD8\xB2\x1C\x7F\x13Y.\x16O \vL*/F\xE3\"C\xF5\xE7\xAD\x85\x14K\xCE\\\xC4\xEB:\xD32d\x8B\xA1\x11M\xA3KM\n\x8D\xF3\xACw\xF73A\x9C~\xB6|\xE9z.g\xEC\x8D\xA1\xF5G,\x18\xF6\r\x0F/\xAE\e\x0F\x1C\xA0\xCDW\xDE\xC7K%=Y\xFC\xF2\x12\xD4\xE3\x99\xA0w|6\x99\xB8\xB4)\xC2ap(n\x98\xB5KS\x02\xFAm\x00\xF6\x95\xD66\xAC\x12\xD5\x8E\xA0==\xF6ME\x87\x16ZT\xE4y$~,9H\x8D\x00_\xDAo%[q\xE0Z,^\x02\xA5f\xFF\xAC\xBC.\x80\xC0Ys\x13~I+\x98\xE1\x9E\xD2-\x94\xF5\x8A?|" | |
## PLAIN TEXT ## | |
"require 'fiddle/import'\n\n### TESTING ###\n\nmodule Auth\n extend(Fiddle::Importer)\n dlload('/usr/local/lib/libmonocypher.so.2')\n typealias('u8', 'unsigned char')\n # External bindings\n extern <<-__C__\n void \n crypto_lock(u8 *mac,\n u8 *ciphertext,\n u8 *key,\n u8 *nonce,\n u8 *plaintext,\n size_t textsize)\n __C__\n #\n extern <<-__C__\n int \n crypto_unlock(u8 *plaintext,\n u8 *key,\n u8 *nonce,\n u8 *mac,\n u8 *ciphertext,\n size_t textsize)\n __C__\n\n def self.encrypt(k, n, msg)\n mac = Random.bytes(16)\n ct = Array.new(msg.bytesize, 0).pack('C*')\n crypto_lock(mac, ct, k, n, msg, msg.bytesize)\n mac << ct \n end\n\n def self.decrypt(k, n, msg)\n mac = msg[0..15]\n msg = msg[16..]\n pt = Array.new(msg.bytesize, 0).pack('C*')\n status = crypto_unlock(pt, k, n, mac, msg, msg.bytesize)\n if status == 0\n pt # leave as binary or encode?\n else\n raise \"corrupted message\"\n end\n end\nend\n\nmsg = DATA.tap { |d| d.rewind }.read\np \"## PLAIN TEXT ##\"\nputs msg\nkey = Random.bytes(32)\niv = Random.bytes(24)\n\nputs \"## CIPHER TEXT ##\"\ncipher = Auth.encrypt(key, iv, msg)\np cipher\n\nputs\nputs \"## PLAIN TEXT ##\"\nplain = Auth.decrypt(key, iv, cipher) \np plain\n\n__END__\n\xF0\x9F\xA4\xA0\xF0\x9F\xA4\xA1\xF0\x9F\xA4\xA2\xF0\x9F\xA4\xA3\xF0\x9F\xA4\xA4\xF0\x9F\xA4\xA5\xF0\x9F\xA4\xA6\xF0\x9F\xA4\xA7\xF0\x9F\xA4\xA8\xF0\x9F\xA4\xA9\xF0\x9F\xA4\xAA\xF0\x9F\xA4\xAB\xF0\x9F\xA4\xAC\xF0\x9F\xA4\xAD\xF0\x9F\xA4\xAE\xF0\x9F\xA4\xAF\n\xC2\xB9\xC2\xB2\xC2\xB3\xE2\x82\xAC\xC2\xBD\xC2\xBE{[]}@\xC5\x82e\xC2\xB6\xC5\xA7\xE2\x86\x90\xE2\x86\x93\xE2\x86\x92\xC3\xB8\xC3\xBE\xC3\xA6\xC3\x9F\xC3\xB0\xC4\x91\xC5\x8B\xC4\xA7\xC5\x82\xC2\xAB\xC2\xBB\xC2\xA2\xE2\x80\x9C\xE2\x80\x9Dn\xC2\xB5\n" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment