diff --git a/cryptoshim.py b/cryptoshim.py new file mode 100644 index 00000000..a87f0420 --- /dev/null +++ b/cryptoshim.py @@ -0,0 +1,16 @@ +''' + Onionr - P2P Microblogging Platform & Social network. Run with 'help' for usage. + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +''' + diff --git a/timedHmac.py b/timedHmac.py new file mode 100644 index 00000000..a046062d --- /dev/null +++ b/timedHmac.py @@ -0,0 +1,39 @@ +''' + Onionr - P2P Microblogging Platform & Social network. Run with 'help' for usage. + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + You should have received a copy of the GNU General Public License + along with this program. If not, see . +''' +import hmac, base64, time, math +class TimedHMAC: + def __init__(self, base64Key, data, hashAlgo): + ''' + base64Key = base64 encoded key + data = data to hash + expire = time expiry in epoch + hashAlgo = string in hashlib.algorithms_available + + Maximum of 10 seconds grace period + ''' + self.data = data + self.expire = math.floor(time.time()) + self.hashAlgo = hashAlgo + self.b64Key = base64Key + generatedHMAC = hmac.HMAC(base64.b64decode(base64Key).decode(), digestmod=self.hashAlgo) + generatedHMAC.update(data + expire) + self.HMACResult = generatedHMAC.hexdigest() + return + + def check(self, data): + testHash = hmac.HMAC(base64.b64decode(base64Key).decode(), digestmod=self.hashAlgo) + testHash.update(data + math.floor(time.time())) + testHash = testHash.hexdigest() + if hmac.compare_digest(testHash, self.HMACResult) \ No newline at end of file