예제 #1
0
def generate_public_key(private_key, security_level=SECURITY_LEVEL):
    public_key = []
    modulus = 2 ** (security_level * 8)
    for count in range(32):
        chaff = [random_integer(security_level) for count in range(security_level / 2)]        
        shares_tier0 = secret_split(0, security_level, 4, modulus)
        shares = []
        for share in shares_tier0:
            shares.extend(secret_split(share, security_level, 4, modulus))
        assert len(shares) == 16
        combined = shares + chaff
        shuffle(combined, private_key)
        for chaff_share in chaff:
            if combined[0] == chaff_share:
                raise ValueError("Invalid private key")
        public_key.append(combined)
    return public_key
예제 #2
0
def generate_public_key(private_key, security_level=SECURITY_LEVEL):
    public_key = []
    modulus = 2**(security_level * 8)
    for count in range(32):
        chaff = [
            random_integer(security_level)
            for count in range(security_level / 2)
        ]
        shares_tier0 = secret_split(0, security_level, 4, modulus)
        shares = []
        for share in shares_tier0:
            shares.extend(secret_split(share, security_level, 4, modulus))
        assert len(shares) == 16
        combined = shares + chaff
        shuffle(combined, private_key)
        for chaff_share in chaff:
            if combined[0] == chaff_share:
                raise ValueError("Invalid private key")
        public_key.append(combined)
    return public_key
예제 #3
0
def encrypt(m, key, security_level=SECURITY_LEVEL, modulus=MODULUS):    
    ciphertext = []
    weight = hamming_weight(key)    
    shares = secret_split(m, security_level, weight, modulus)    
    chaff = [random_integer(security_level) for count in range((security_level * 8) - weight)]    
    for bit_number in range(security_level * 8):
        if (key >> bit_number) & 1 == 1:            
            ciphertext.append(shares.pop(0))
        else:
            ciphertext.append(chaff.pop(0))
    return ciphertext
예제 #4
0
def encrypt(m, public_key, security_level=SECURITY_LEVEL):
    element_size = len(public_key[0])
    modulus = 2 ** (security_level * 8)
    ciphertext = [0 for count in range(element_size)]            
    m_shares = secret_split(m, security_level, security_level, modulus)    
    
    for count in range(security_level):        
        element = public_key[count]
        r_share = m_shares[count]        
        for index in range(element_size):
            ciphertext[index] = (ciphertext[index] + (r_share * element[index])) % modulus            
    return ciphertext
예제 #5
0
def encrypt(m, public_key, security_level=SECURITY_LEVEL):
    element_size = len(public_key[0])
    modulus = 2**(security_level * 8)
    ciphertext = [0 for count in range(element_size)]
    m_shares = secret_split(m, security_level, security_level, modulus)

    for count in range(security_level):
        element = public_key[count]
        r_share = m_shares[count]
        for index in range(element_size):
            ciphertext[index] = (ciphertext[index] +
                                 (r_share * element[index])) % modulus
    return ciphertext
예제 #6
0
def encrypt(m, key, security_level=SECURITY_LEVEL, modulus=MODULUS):
    ciphertext = []
    weight = hamming_weight(key)
    shares = secret_split(m, security_level, weight, modulus)
    chaff = [
        random_integer(security_level)
        for count in range((security_level * 8) - weight)
    ]
    for bit_number in range(security_level * 8):
        if (key >> bit_number) & 1 == 1:
            ciphertext.append(shares.pop(0))
        else:
            ciphertext.append(chaff.pop(0))
    return ciphertext
예제 #7
0
def generate_public_key(private_key, security_level=SECURITY_LEVEL):
    public_key = []
    modulus = 2 ** (security_level * 8)        
       
    for public_key_element_number in range(security_level):
        element = []        
        shares = secret_split(1, security_level, hamming_weight(private_key), modulus)        
        for counter in range(security_level * 8):
            if (private_key >> counter) & 1:
                element.append(shares.pop(0))
            else:
                element.append(random_integer(security_level))        
        public_key.append(element)
    return public_key       
예제 #8
0
def generate_public_key(private_key, security_level=SECURITY_LEVEL, dimensions=DIMENSIONS):
    public_key = []
    modulus = 2 ** (security_level * 8)        
                
    for public_key_element_number in range(dimensions):
        element = []        
        shares = secret_split(0, security_level, hamming_weight(private_key), modulus)        
        for counter in range(security_level * 8):
            if (private_key >> counter) & 1:
                element.append(shares.pop(0))
            else:
                element.append(random_integer(security_level))        
        public_key.append(element)
    return public_key       
예제 #9
0
def public_key_operation(m, public_key, security_level=SECURITY_LEVEL, q=Q):
    x, y = secret_split(m, security_level, 2, q)
    a, b = public_key

    return add(scalar_multiplication(a, x, q), scalar_multiplication(b, y, q),
               q)
예제 #10
0
def secret_key_encrypt(m, key, security_level=SECURITY_LEVEL, q=Q):
    x, y = secret_split(m, security_level, 2, q)
    a, b = key
    return (a * x) % q, (b * y) % q
예제 #11
0
파일: axby3.py 프로젝트: erose1337/crypto
def encrypt(m, key, parameters=PARAMETERS, q=Q):           
    message_vector = secret_split(m, parameters["x_size"], 2, parameters["x_modulus"])            
    ciphertext = dot_product(key.encryption_key, message_vector) % q    
    return ciphertext
예제 #12
0
def encrypt(m, key, security_level=SECURITY_LEVEL, q=Q):
    x, y = secret_split(m, security_level, 2, q)
    a, b = key
    return (a * x) % q, (b * y) % q
예제 #13
0
def public_key_operation(m, public_key, security_level=SECURITY_LEVEL, q=Q):
    x, y = secret_split(m, security_level, 2, q)
    a, b = public_key
    
    return add(scalar_multiplication(a, x, q),
               scalar_multiplication(b, y, q), q)