示例#1
0
 def test_crypto_stream_xor(self):
     pysodium.crypto_stream_xor(b'howdy', len(b'howdy'))
     pysodium.crypto_stream_xor(b'howdy' * 16, len(b'howdy') * 16)
示例#2
0
 def test_crypto_stream_xor(self):
     pysodium.crypto_stream_xor(b'howdy', len(b'howdy'))
     pysodium.crypto_stream_xor(b'howdy' * 16, len(b'howdy') * 16)
示例#3
0
 def test_crypto_stream_xor(self):
     nonce = b'\x00' * pysodium.crypto_stream_NONCEBYTES
     key = b'\x00' * pysodium.crypto_stream_KEYBYTES
     pysodium.crypto_stream_xor(b'howdy', len(b'howdy'), nonce, key)
     pysodium.crypto_stream_xor(b'howdy' * 16,
                                len(b'howdy') * 16, nonce, key)
示例#4
0
    sys.exit('Error: Unable to import public key, aborting.')

if clargs.file is None:
    message = sys.stdin.read().encode()
else:
    with open(clargs.file, 'r') as msgfile:
        message = msgfile.read().encode()

if (message is None) or (len(message) == 0):
    sys.exit('Error: Plaintext length 0, aborting.')

# generate a random (ephemeral) private key
eprivkey = FieldElement.urandom(curve.p)
SharedPt = Pubkey * eprivkey
sbytes = SharedPt.compressed()
key = sha256(sbytes).digest()

nonce = pysodium.randombytes(pysodium.crypto_stream_NONCEBYTES)
assert pysodium.crypto_stream_NONCEBYTES == 24
assert pysodium.crypto_stream_KEYBYTES == 32

ctext = pysodium.crypto_stream_xor(message, len(message), nonce, key)

# public key point for ephemeral key
Gpt = ECPoint(curve, curve.G)
ePubkey = Gpt * eprivkey

DERmsg = der_encode_message(ePubkey, nonce, ctext)

print(pem_wrap(DERmsg, 'ECDHE_XSALSA20 ENCRYPTED MESSAGE'))
示例#5
0
    sys.exit('Error: Unable to import private key, aborting.')

if privkey is None:
    sys.exit('Error: Unable to import public key, aborting.')

if clargs.file is None:
    inCtxt = sys.stdin.read()
else:
    with open(clargs.file, 'r') as msgfile:
        inCtxt=msgfile.read()

ctder = pem_unwrap(inCtxt, 'ECDHE_XSALSA20 ENCRYPTED MESSAGE')
if ctder is None:
    sys.exit('unable to decode ECDHE_XSALSA20 ENCRYPTED MESSAGE in base64 PEM format')

(ePubkeybytes, nonce, ctext) = der_decode_message(ctder)

try:
    ePubkey = ECPoint(curve, ePubkeybytes)
except (TypeError, ValueError):
    sys.exit('Pubkey value invalid for curve')

# generate a random (ephemeral) private key
SharedPt = ePubkey * privkey
sbytes = SharedPt.compressed()
key = sha256(sbytes).digest()

ptext = pysodium.crypto_stream_xor(ctext, len(ctext), nonce, key)

print(ptext.decode(), end='')
示例#6
0
 def test_crypto_stream_xor(self):
     nonce = b'\x00' * pysodium.crypto_stream_NONCEBYTES
     key = b'\x00' * pysodium.crypto_stream_KEYBYTES
     pysodium.crypto_stream_xor(b'howdy', len(b'howdy'), nonce, key)
     pysodium.crypto_stream_xor(b'howdy' * 16, len(b'howdy') * 16, nonce, key)