mirror of
https://git.linux-kernel.at/oliver/ivatar.git
synced 2025-11-13 19:56:25 +00:00
Compare commits
48 Commits
550b9bf0b9
...
cipher_tes
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
44a6b9a099 | ||
|
|
2163c60f5b | ||
|
|
0c68843849 | ||
|
|
92f495ebe0 | ||
|
|
39ff27984c | ||
|
|
f0a2d5aae4 | ||
|
|
cc761467f5 | ||
|
|
44e85365bc | ||
|
|
8c9b14ec0e | ||
|
|
88e6e5a80f | ||
|
|
aa3a7a2497 | ||
|
|
9a5bdf9364 | ||
|
|
01f0f29859 | ||
|
|
a80d704a59 | ||
|
|
63a4737717 | ||
|
|
5ec186e039 | ||
|
|
358b3cec8c | ||
|
|
bc3ce39a19 | ||
|
|
70ffb10d51 | ||
|
|
3797018139 | ||
|
|
c6601b60c0 | ||
|
|
26ae405899 | ||
|
|
a40f262ceb | ||
|
|
817984a43b | ||
|
|
84a265eca5 | ||
|
|
f53ad22524 | ||
|
|
abd9ccff7c | ||
|
|
1b70908f58 | ||
|
|
0fe50c6317 | ||
|
|
af98487c1d | ||
|
|
ccd72d5422 | ||
|
|
86bb77eb9d | ||
|
|
0f84845ca9 | ||
|
|
d9c33f7ee3 | ||
|
|
c04e5ad266 | ||
|
|
4cdb61724f | ||
|
|
507e623962 | ||
|
|
85ccf0f7be | ||
|
|
d2e28fe809 | ||
|
|
6c6afd5152 | ||
|
|
4db099156b | ||
|
|
870a2a2365 | ||
|
|
3f01e0c3e1 | ||
|
|
03bf496117 | ||
|
|
a573985248 | ||
|
|
c3214a9a2b | ||
|
|
29c8f17e06 | ||
|
|
c864c2f115 |
8
encrypted_proxy/README.md
Normal file
8
encrypted_proxy/README.md
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
The code in here should be able to help to build up some encrypting proxy.
|
||||||
|
|
||||||
|
If your app uses a lot of libravatar and therefore has to do a lot of DNS
|
||||||
|
lookups, change your app in such a way, that it encodes the mail address,
|
||||||
|
sends it over to the proxy, which will decrypt it, do the DNS lookup and
|
||||||
|
return the image binary.
|
||||||
|
|
||||||
|
No guarantee for this code. It's untested and just provided as example.
|
||||||
90
encrypted_proxy/lib/MyCypher.php
Normal file
90
encrypted_proxy/lib/MyCypher.php
Normal file
@@ -0,0 +1,90 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Valid encryption methods AES-256-CFB
|
||||||
|
* Code kindly borrowed from:
|
||||||
|
* https://github.com/arajapandi/php-python-encrypt-decrypt
|
||||||
|
*
|
||||||
|
* $cypher = new MyCypher($iv);
|
||||||
|
* $php_encrypted = $cypher->encrypt('test');
|
||||||
|
* $php_decrypted = $cypher->decrypt($php_encrypted);
|
||||||
|
*/
|
||||||
|
class MyCypher {
|
||||||
|
|
||||||
|
private $key = 'asdfa923aksadsYahoasdw998sdsads';
|
||||||
|
private $iv = null;
|
||||||
|
private $method = "AES-256-CFB";
|
||||||
|
private $blocksize = 32;
|
||||||
|
private $padwith = '`';
|
||||||
|
|
||||||
|
/*
|
||||||
|
* construct for cypher class - get, set key and iv
|
||||||
|
*/
|
||||||
|
|
||||||
|
function __construct($iv, $key = null) {
|
||||||
|
|
||||||
|
if (is_string($key)) {
|
||||||
|
$this->key = $key;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->iv = $iv;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* get hased key - if key is not set on init, then default key wil be used
|
||||||
|
*/
|
||||||
|
|
||||||
|
private function getKEY() {
|
||||||
|
|
||||||
|
if (empty($this->key)) {
|
||||||
|
die('Key not set!');
|
||||||
|
}
|
||||||
|
|
||||||
|
return substr(hash('sha256', $this->key), 0, 32);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* get hashed IV value - if no IV values then it throw error
|
||||||
|
*/
|
||||||
|
|
||||||
|
private function getIV() {
|
||||||
|
|
||||||
|
if (empty($this->iv)) {
|
||||||
|
die('IV not set!');
|
||||||
|
}
|
||||||
|
|
||||||
|
return substr(hash('sha256', $this->iv), 0, 16);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Encrypt given string using AES encryption standard
|
||||||
|
*/
|
||||||
|
|
||||||
|
public function encrypt($secret) {
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
$padded_secret = $secret . str_repeat($this->padwith, ($this->blocksize - strlen($secret) % $this->blocksize));
|
||||||
|
$encrypted_string = openssl_encrypt($padded_secret, $this->method, $this->getKEY(), OPENSSL_RAW_DATA, $this->getIV());
|
||||||
|
$encrypted_secret = base64_encode($encrypted_string);
|
||||||
|
return $encrypted_secret;
|
||||||
|
} catch (Exception $e) {
|
||||||
|
die('Error : ' . $e->getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Decrypt given string using AES standard
|
||||||
|
*/
|
||||||
|
|
||||||
|
public function decrypt($secret) {
|
||||||
|
try {
|
||||||
|
$decoded_secret = base64_decode($secret);
|
||||||
|
$decrypted_secret = openssl_decrypt($decoded_secret, $this->method, $this->getKEY(), OPENSSL_RAW_DATA, $this->getIV());
|
||||||
|
return rtrim($decrypted_secret, $this->padwith);
|
||||||
|
} catch (Exception $e) {
|
||||||
|
die('Error : ' . $e->getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
73
encrypted_proxy/lib/MyCypher.py
Normal file
73
encrypted_proxy/lib/MyCypher.py
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
#!/usr/bin/env python2
|
||||||
|
#encoding: UTF-8
|
||||||
|
|
||||||
|
# Code kindly borrowed from:
|
||||||
|
# https://github.com/arajapandi/php-python-encrypt-decrypt
|
||||||
|
|
||||||
|
# Python Class for AES encryption
|
||||||
|
"""
|
||||||
|
Example Usage
|
||||||
|
enc_str = cipher.encrypt('secret')
|
||||||
|
enc_str = cipher.decrypt(enc_str)
|
||||||
|
print(enc_str); #secret
|
||||||
|
"""
|
||||||
|
|
||||||
|
from Crypto.Cipher import AES
|
||||||
|
import base64
|
||||||
|
import hashlib
|
||||||
|
import sys
|
||||||
|
|
||||||
|
class MyCypher:
|
||||||
|
# Default Key for encryption
|
||||||
|
rawkey = 'asdfa923aksadsYahoasdw998sdsads'
|
||||||
|
method = AES.MODE_CFB
|
||||||
|
blocksize = 32 # 16, 32..etc
|
||||||
|
padwith = '`'.encode('utf-8') # padding value for string
|
||||||
|
|
||||||
|
#lambda function for padding
|
||||||
|
pad = lambda self, s: s + (self.blocksize - len(s) % self.blocksize) * self.padwith
|
||||||
|
|
||||||
|
"""
|
||||||
|
construct for cypher class - get, set key and iv
|
||||||
|
"""
|
||||||
|
def __init__(self, iv, key=''):
|
||||||
|
|
||||||
|
if(not key):
|
||||||
|
key = self.rawkey
|
||||||
|
|
||||||
|
self.key = key.encode('utf-8')
|
||||||
|
self.iv = iv.encode('utf-8')
|
||||||
|
|
||||||
|
"""
|
||||||
|
get hased key - if key is not set on init, then default key wil be used
|
||||||
|
"""
|
||||||
|
def getKEY(self):
|
||||||
|
if(not self.key):
|
||||||
|
sys.exit()
|
||||||
|
|
||||||
|
return hashlib.sha256(self.key).hexdigest()[:32]
|
||||||
|
|
||||||
|
"""
|
||||||
|
get hashed IV value - if no IV values then it throw error
|
||||||
|
"""
|
||||||
|
def getIV(self):
|
||||||
|
if(not self.iv):
|
||||||
|
sys.exit()
|
||||||
|
|
||||||
|
self.iv = self.iv
|
||||||
|
return hashlib.sha256(self.iv).hexdigest()[:16]
|
||||||
|
|
||||||
|
"""
|
||||||
|
Encrypt given string using AES encryption standard
|
||||||
|
"""
|
||||||
|
def encrypt(self, raw):
|
||||||
|
cipher = AES.new(self.getKEY(), self.method, self.getIV(), segment_size=128)
|
||||||
|
return base64.b64encode(cipher.encrypt(self.pad(raw)))
|
||||||
|
|
||||||
|
"""
|
||||||
|
Decrypt given string using AES standard
|
||||||
|
"""
|
||||||
|
def decrypt(self, encrypted):
|
||||||
|
encrypted = base64.b64decode(encrypted)
|
||||||
|
cipher = AES.new(self.getKEY(), self.method, self.getIV(), segment_size=128)
|
||||||
|
return cipher.decrypt(encrypted).rstrip(self.padwith)
|
||||||
32
encrypted_proxy/proxy.py
Executable file
32
encrypted_proxy/proxy.py
Executable file
@@ -0,0 +1,32 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import urllib.request
|
||||||
|
import sys
|
||||||
|
import os
|
||||||
|
from lib.MyCypher import MyCypher
|
||||||
|
import libravatar
|
||||||
|
|
||||||
|
# Both need to be the same as in your client code that encrypts the
|
||||||
|
# mail address
|
||||||
|
iv = 'asdf'
|
||||||
|
key = 'Hallo123'
|
||||||
|
|
||||||
|
#sys.stderr.buffer.write(b'%s' % bytes(os.environ.get("QUERY_STRING", "No Query String in url"), 'utf-8'))
|
||||||
|
|
||||||
|
cypher = MyCypher(iv = iv, key = key)
|
||||||
|
mail = cypher.decrypt(os.environ.get('QUERY_STRING').encode('utf-8')).decode('utf-8')
|
||||||
|
|
||||||
|
link = libravatar.libravatar_url(mail)
|
||||||
|
sys.stderr.buffer.write(b'%s' % bytes(link, 'utf-8'))
|
||||||
|
|
||||||
|
data = None
|
||||||
|
with urllib.request.urlopen(link) as f:
|
||||||
|
data = f.read()
|
||||||
|
|
||||||
|
for header in f.headers._headers:
|
||||||
|
if header[0] == 'Content-Type':
|
||||||
|
sys.stdout.buffer.write(b"%s: %s\n\n" % (bytes(header[0], 'utf-8'), bytes(header[1], 'utf-8')))
|
||||||
|
sys.stdout.flush()
|
||||||
|
break
|
||||||
|
|
||||||
|
sys.stdout.buffer.write(data)
|
||||||
9
encrypted_proxy/test_code/decrypt.py
Normal file
9
encrypted_proxy/test_code/decrypt.py
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
from MyCypher import MyCypher
|
||||||
|
|
||||||
|
encstr = bytes('drEN/LqPBu1wJYHpN5eCjZXqVgvDEP3rZnXJt85Ma0k=', 'utf-8')
|
||||||
|
|
||||||
|
cypher = MyCypher(iv = str('asdf'))
|
||||||
|
print(cypher.decrypt(encstr))
|
||||||
|
|
||||||
8
encrypted_proxy/test_code/encrypt.php
Normal file
8
encrypted_proxy/test_code/encrypt.php
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
<?php
|
||||||
|
include 'lib/MyCypher.php';
|
||||||
|
|
||||||
|
$iv = 'asdf';
|
||||||
|
$key = 'Hallo123';
|
||||||
|
$cypher = new MyCypher($iv=$iv, $key=$key);
|
||||||
|
$php_encrypted = $cypher->encrypt('oliver@linux-kernel.at');
|
||||||
|
print($php_encrypted);
|
||||||
Reference in New Issue
Block a user