Esempio n. 1
0
def agreement(P, config={}):
    '''
    P: 导频数
    config: 密钥生成配置项,包括:
        sampling_period:采样周期
        sampling_time:采样时间
        corr_ab: Alice和Bob的信道测量值的相关系数
        corr_ae: Alice和Eve的信道测量值的相关系数
        block_size:双阈值量化的子块采样点数
        coef: 双阈值量化的量化系数
        qtype: 均匀量化的编码方式。gray/natural
        order: 均匀量化的量化阶数
        mtype: 合并类型。RSSI/Phase/cross/and/or/xor
        iteration: 信息协调迭代次数
        m: 汉明码监督位m
    '''
    ''' 采样参数 '''
    sampling_period = config.get('sampling_period', 1)
    sampling_time = config.get('sampling_time', 3)
    corr_ab = config.get('corr_ab', 0.9)
    corr_ae = config.get('corr_ae', 0.4)
    ''' 量化参数 '''
    block_size = config.get('block_size', 25)
    coef = config.get('coef', 0.8)
    qtype = config.get('qtype', 'gray')
    order = config.get('order', 1)
    mtype = config.get('mtype', 'cross')
    ''' 信息协调参数 '''
    iteration = config.get('iteration', 2)
    m = config.get('m', 3)
    ''' 采样 '''
    rssi_A, rssi_B, rssi_E = sampling_RSSI(sampling_period, sampling_time,
                                           corr_ab, corr_ae)
    phase_A, phase_B, phase_E = sampling_phase(sampling_period, sampling_time,
                                               corr_ab, corr_ae)
    ''' RSSI量化 '''
    bits_A_rssi, drop_list_A = quantize_ASBG_1bit(rssi_A, block_size, coef)
    bits_B_rssi, drop_list_B = quantize_ASBG_1bit(rssi_B, block_size, coef)
    bits_E_rssi, drop_list_E = quantize_ASBG_1bit(rssi_E, block_size, coef)
    bits_A_rssi = remain(bits_A_rssi, drop_list_B)
    bits_B_rssi = remain(bits_B_rssi, drop_list_A)
    bits_E_rssi = remain(bits_E_rssi, drop_list_A)
    ''' Phase量化 '''
    bits_A_phase = quantize_phase(phase_A, qtype, order)
    bits_B_phase = quantize_phase(phase_B, qtype, order)
    bits_E_phase = quantize_phase(phase_E, qtype, order)
    ''' 合并 '''
    bits_A = merge(bits_A_rssi, bits_A_phase, mtype)
    bits_B = merge(bits_B_rssi, bits_B_phase, mtype)
    bits_E = merge(bits_E_rssi, bits_E_phase, mtype)
    ''' 信息协调 '''
    bits_A, bits_B = winnow(bits_A, bits_B, iteration, m)
    ''' 生成导频 '''
    pos_A = encode(bits_A, P)
    pos_B = encode(bits_B, P)
    pos_E = encode(bits_E, P)

    return pos_A, pos_B, pos_E
Esempio n. 2
0
def agreement(P,mtype='cross',iteration=2,corr_ab=0.9,corr_ae=0.4):
    '''
    P: 导频数
    mtype: 合并类型。RSSI/Phase/cross/and/or/xor
    iteration: winnow迭代次数
    corr_ab: Alice和Bob的信道测量值的相关系数
    corr_ae: Alice和Eve的信道测量值的相关系数
    '''
    
    ''' 采样参数 '''
    sampling_period = 1
    sampling_time = 3
    
    ''' 量化参数 '''
    block_size = 25
    coef = 0.8
    qtype = 'gray'
    order = 1
    
    ''' 采样 ''' 
    rssi_A,rssi_B,rssi_E = sampling('RSSI',sampling_period,sampling_time,corr_ab,corr_ae)  
    phase_A,phase_B,phase_E = mod(sampling('Phase',sampling_period,sampling_time,corr_ab,corr_ae),2*pi)
    #print 'corrcoef of rssi  between AB and AE:',corrcoef(rssi_A, rssi_B, rowvar=0)[0,1],corrcoef(rssi_A, rssi_E, rowvar=0)[0,1]
    #print 'corrcoef of phase between AB and AE:',corrcoef(phase_A,phase_B,rowvar=0)[0,1],corrcoef(phase_A,phase_E,rowvar=0)[0,1]
        
    ''' RSSI量化 '''
    bits_A_rssi,drop_list_A = quantization_thre(rssi_A,block_size,coef)
    bits_B_rssi,drop_list_B = quantization_thre(rssi_B,block_size,coef)
    bits_E_rssi,drop_list_E = quantization_thre(rssi_E,block_size,coef)
    bits_A_rssi = remain(bits_A_rssi,drop_list_A,drop_list_B)
    bits_B_rssi = remain(bits_B_rssi,drop_list_A,drop_list_B)
    bits_E_rssi = remain(bits_E_rssi,drop_list_A,drop_list_E)
    #print 'BMR of RSSI before winnow between AB',BMR(bits_A_rssi,bits_B_rssi)
    
    ''' Phase量化 '''
    bits_A_phase = quantization_even('Phase',phase_A,size(phase_A),qtype,order)
    bits_B_phase = quantization_even('Phase',phase_B,size(phase_B),qtype,order)
    bits_E_phase = quantization_even('Phase',phase_E,size(phase_E),qtype,order)
    #print 'BMR of phase before winnow between AB',BMR(bits_A_phase,bits_B_phase)
    
    ''' 合并 '''
    bits_A = merge(bits_A_rssi,bits_A_phase,mtype)
    bits_B = merge(bits_B_rssi,bits_B_phase,mtype)
    bits_E = merge(bits_E_rssi,bits_E_phase,mtype)
    #print 'BMR of merge before winnow between AB',BMR(bits_A,bits_B)
    
    ''' winnow信息协调 '''
    bits_A, bits_B = winnow(bits_A,bits_B,iteration)
    #print 'BMR of merge after winnow between AB',BMR(bits_A,bits_B)
    
    ''' 生成导频 '''
    pos_A = encode(bits_A,P)
    pos_B = encode(bits_B,P)
    pos_E = encode(bits_E,P)

    return pos_A,pos_B,pos_E
Esempio n. 3
0
def search():

    query = request.args['query']

    fingerprint = list(winnow(query))
    fingerprint_count = len(fingerprint)

    cursor = db.document.find({'fingerprint.digest': fingerprint[0][1]})

    return json.dumps(map(None, cursor), cls=MongoEncoder)
Esempio n. 4
0
def document_add():
    source, target, source_text, target_text = map(lambda x: request.form[x],
        ('source', 'target', 'source_text', 'target_text'))

    # TODO: Any better way to handle this?
    document = dict(
        timestamp=datetime.utcnow(),
        source=source,
        target=target,
        source_text=source_text,
        target_text=target_text,
        source_hash=sha1(source_text),
        target_hash=sha1(target_text),
        fingerprint=[dict(offset=v[0], digest=v[1]) for v in winnow(source_text)]
    )
    document_id = db.document.insert(document)

    return ''