Skip to content

Instantly share code, notes, and snippets.

@gr33n7007h

gr33n7007h/a.rb Secret

Last active November 23, 2019 05:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gr33n7007h/813a7b47f17ed207cd65d1a5fd6d6e03 to your computer and use it in GitHub Desktop.
Save gr33n7007h/813a7b47f17ed207cd65d1a5fd6d6e03 to your computer and use it in GitHub Desktop.
blah
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µ
"## 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