Esempio n. 1
0
 def test_package_identity(self):
     index = 0
     message = "Test that pad being 0 is identity"
     p_text = chr(0)*len(message)
     p_body = chr(0)*(len(message)+ crypto.TAG_LENGTH)
     p_tag_key = chr(0) * crypto.TAG_KEY_LENGTH
     package = crypto.package(index, message, p_text, p_body, p_tag_key)
     # Should be index | message | HMAC(key, index | message)
     correctPackage = 6*chr(0)+message+(crypto.hmac_sha256(p_tag_key, 6*chr(0)+message))
     self.assertEqual(package, correctPackage)
Esempio n. 2
0
    def test_package_reflexive(self):
        message = "Test that packaged and unpackaging returns the same message"
        index = 0
        p_text =  "otuhixnuheotuheouaoecgudoaeuteoahduao',.peaecd'983d uaoeuhu" #pseudo random typing
        p_body = ",'cd.ucr,'.gud.,9'ud249 l3uf19842gfpd4gdu r9'7i3pkur84gciudr.g,fi r138uf927 i'e7pduxanw;jk8"
        p_tag_key = "N\xbb\xcf\xb0jT\x81\x12X2.\xe5zMi\xee"

        self.assertEquals(len(p_body), len(p_text)+crypto.TAG_LENGTH)
        package = crypto.package(index, message, p_text, p_body, p_tag_key)
        unpackage = crypto.unpackage(package, p_text, p_body, p_tag_key)
        self.assertEquals(unpackage, message)
Esempio n. 3
0
def package(src_uid, dst_uid, message):
    """Encrypt a message from from_uid to to_uid.
    Message is plaintext.
    Package it up with the index and MAC so the recipient can decode it.
    """
    if src_uid == dst_uid:
        return {
            "success": False,
            "error": "Rejecting message to yourself."
        }

    message = message.encode("utf-8")
    if not csc.yn_prompt("Are you sure you want send a\n{} byte message?".format(len(message))):
        return {
            "success": False,
            "error": "User rejected pad read request.",
        }

    try:
        (p_text, index) = read.read_encrypt_pad(src_uid, dst_uid, len(message))
        (p_body, _)     = read.read_encrypt_pad(src_uid, dst_uid, len(message) + crypto.TAG_LENGTH)
        (p_tag_key, _)  = read.read_encrypt_pad(src_uid, dst_uid, crypto.TAG_KEY_LENGTH)
    except metadata.NoMetadataException:
        return {
            "success": False,
            "error": "Shared pad not found.",
        }
    except read.PadContainException:
        return {
            "success": False,
            "error": "Pad depleted.",
        }

    try:
        package = crypto.package(index, message, p_text, p_body, p_tag_key, verbose=True)
        # Base64 encode the package for transport.
        package_b64 = base64.b64encode(package)
        return {
            "success": True,
            "package": package_b64,
        }
    except crypto.CryptoError:
        traceback.print_exc()
        return {
            "success": False,
            "error": "Encryption failed.",
        }