コード例 #1
0
ファイル: pbkdf2.py プロジェクト: asweigart123/nigori
def F(p, s, c, i):
  mac = hmac.new(p, digestmod = hashlib.sha1)
  m2 = mac.copy()
  m2.update(s + pad_int2bin(i, 4))
  prev = m2.digest()
  u = bin2int(prev)
  for i in range(c - 1):
    m2 = mac.copy()
    m2.update(prev)
    prev = m2.digest()
    u = u ^ bin2int(prev)
  return int2bin(u)
コード例 #2
0
ファイル: pbkdf2.py プロジェクト: majacQ/nigori
def F(p, s, c, i):
    mac = hmac.new(p, digestmod=hashlib.sha1)
    m2 = mac.copy()
    m2.update(s + pad_int2bin(i, 4))
    prev = m2.digest()
    u = bin2int(prev)
    for i in range(c - 1):
        m2 = mac.copy()
        m2.update(prev)
        prev = m2.digest()
        u = u ^ bin2int(prev)
    return int2bin(u)
コード例 #3
0
ファイル: verifier.py プロジェクト: majacQ/nigori
 def verify(self, message, s, e):
   r = (pow(self.g, s, self.p) * pow(self.publicKey, e, self.p)) % self.p
   h = HashWrapper()
   h.add(message)
   h.add(int2bin(r))
   e1 = h.digest()
   return bin2int(e1) == e
コード例 #4
0
 def sign(self, message):
     k = random.SystemRandom().randrange(self.q)
     r = pow(self.g, k, self.p)
     h = HashWrapper()
     h.add(message)
     h.add(int2bin(r))
     e = h.digest()
     s = (k - self.x * bin2int(e)) % self.q
     signature = (e, int2bin(s))
     return signature
コード例 #5
0
ファイル: signer.py プロジェクト: asweigart123/nigori
 def sign(self, message):
   k = random.SystemRandom().randrange(self.q)
   r = pow(self.g, k, self.p)
   h = HashWrapper()
   h.add(message)
   h.add(int2bin(r))
   e = h.digest()
   s = (k - self.x * bin2int(e)) % self.q
   signature = (e,  int2bin(s))
   return signature
コード例 #6
0
ファイル: nigori-server.py プロジェクト: majacQ/nigori
def authenticate(request):
    user = request.get('user')
    users = db.GqlQuery("SELECT * FROM User WHERE user ='******'")
    assert users.count(2) == 1

    (key, l) = ascii.encode(users[0].publicKey)
    verifier = SchnorrVerifier(bin2int(b64dec(key)))

    t = request.get('t')
    # FIXME: check t is recent, expire old tokens
    tokens = db.GqlQuery("SELECT * FROM Token WHERE token = '" + t + "'")
    if tokens.count(1) > 0:
        raise ReplayError()

    token = Token()
    token.token = t
    token.put()

    s = getb64(request, 's')
    e = getb64(request, 'e')

    if not verifier.verify(t, bin2int(s), bin2int(e)):
        raise VerifyError()
コード例 #7
0
ファイル: nigori-client.py プロジェクト: asweigart123/nigori
def splitGet(user, password, name):
  splits = getSplits(user, password)
  k = int(splits[0])
  n = (len(splits) - 1)/2
  assert int(n) == n
  assert k <= n
  
  keys = KeyDeriver(password)
  shares = {}
  # FIXME: obviously we should try all n until we get k splits
  for s in range(k):
    global host, port
    host = splits[2*s + 1]
    port = splits[2*s + 2]
    print "Getting split", s, "from", host + ":" + port
    records = baseGetList(user, password, 1, name)
    record = records[-1]
    share = unconcat(keys.decrypt(record['value']))
    assert len(share) == 2
    shares[bin2int(share[0])] = bin2int(share[1])

  splitter = ShamirSplit()
  secret = splitter.recover(shares)
  print "value =", secret
コード例 #8
0
ファイル: nigori-client.py プロジェクト: majacQ/nigori
def splitGet(user, password, name):
    splits = getSplits(user, password)
    k = int(splits[0])
    n = (len(splits) - 1) / 2
    assert int(n) == n
    assert k <= n

    keys = KeyDeriver(password)
    shares = {}
    # FIXME: obviously we should try all n until we get k splits
    for s in range(k):
        global host, port
        host = splits[2 * s + 1]
        port = splits[2 * s + 2]
        print "Getting split", s, "from", host + ":" + port
        records = baseGetList(user, password, 1, name)
        record = records[-1]
        share = unconcat(keys.decrypt(record['value']))
        assert len(share) == 2
        shares[bin2int(share[0])] = bin2int(share[1])

    splitter = ShamirSplit()
    secret = splitter.recover(shares)
    print "value =", secret
コード例 #9
0
ファイル: nigori-server.py プロジェクト: asweigart123/nigori
def authenticate(request):
  user = request.get('user')
  users = db.GqlQuery("SELECT * FROM User WHERE user ='******'")
  assert users.count(2) == 1

  (key, l) = ascii.encode(users[0].publicKey)
  verifier = SchnorrVerifier(bin2int(b64dec(key)))
    
  t = request.get('t')
  # FIXME: check t is recent, expire old tokens
  tokens = db.GqlQuery("SELECT * FROM Token WHERE token = '"
                       + t + "'")
  if tokens.count(1) > 0:
    raise ReplayError()

  token = Token()
  token.token = t
  token.put()
    
  s = getb64(request, 's')
  e = getb64(request, 'e')
    
  if not verifier.verify(t, bin2int(s), bin2int(e)):
    raise VerifyError()
コード例 #10
0
 def __init__(self, x):
     self.x = bin2int(x)
コード例 #11
0
ファイル: signer.py プロジェクト: asweigart123/nigori
 def __init__(self, x):
   self.x = bin2int(x)