本文整理汇总了Python中bitstring.BitArray.overwrite方法的典型用法代码示例。如果您正苦于以下问题:Python BitArray.overwrite方法的具体用法?Python BitArray.overwrite怎么用?Python BitArray.overwrite使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类bitstring.BitArray
的用法示例。
在下文中一共展示了BitArray.overwrite方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: __init__
# 需要导入模块: from bitstring import BitArray [as 别名]
# 或者: from bitstring.BitArray import overwrite [as 别名]
class qubitString:
def __init__(self,m):
# size of qubit string
self.size=m
# floats can only be 32 or 64 bits
self.canHaveFloat = True if self.size==32 or self.size==64 else False
# create BitArray to hold value of qubit string
self.arrayVal=BitArray(length=m)
# initialization value for qubits
initVal=1/np.sqrt(2)
quString=list()
for i in range(0,self.size):
quString.append(qubit(initVal,initVal))
self.quString=quString
self.decVal=None
self.binVal=None
self.floatVal=None
def collapse(self):
self.bitString=list()
for i in range(0,self.size):
# observe and collapse qubit to a state
self.quString[i].collapse()
# save collapsed value to bit array
if self.quString[i].value == 1:
self.arrayVal.overwrite('0b1',i)
else:
self.arrayVal.overwrite('0b0',i)
# update decimal value
self.decVal=self.arrayVal.int
self.binVal=self.arrayVal.bin
if self.canHaveFloat : self.floatVal = self.arrayVal.float
def rotation_gate(self,angle):
for i,j in enumerate(quString):
quString[i].rotation_gate(angle)
def updateDec(self,num):
# update array value
self.arrayVal.int=num
# update binary value
self.binVal=self.arrayVal.bin
# update qubits values
for i in range(0,self.size):
self.quString[i].value=int(self.binVal[i])
示例2: testOverwrite
# 需要导入模块: from bitstring import BitArray [as 别名]
# 或者: from bitstring.BitArray import overwrite [as 别名]
def testOverwrite(self):
s = BitArray("0b01110")
s.overwrite("0b000", 1)
self.assertEqual(s, "0b00000")
示例3: BitArray
# 需要导入模块: from bitstring import BitArray [as 别名]
# 或者: from bitstring.BitArray import overwrite [as 别名]
#.........这里部分代码省略.........
raise InvalidDUKPTArguments("Must have either ipek or bdk")
if len(bdk) != self.BDK_LEN:
raise InvalidDUKPTArguments("BDK must have a length of %d" % self.BDK_LEN)
self._bdk = BitArray(bytes=bdk)
def derive_key(self, ipek, ksn):
"""Derive a unique key given the ipek and ksn
Keyword arguments:
ipek (BitArray) -- Initial Pin Encryption Key
ksn (BitArray) -- Key Serial Number
"""
c_mask = BitArray(hex='0xc0c0c0c000000000c0c0c0c000000000')
ksn_offset = 2
ctr_offset = -3
right_offset = 8
# Registers taken from documentation
curkey = ipek
ksnr = BitArray(bytes=ksn.bytes[ksn_offset:])
r3 = self.copy_counter(ksnr)
r8 = self.reset_counter(ksnr.bytes)
sr = BitArray(hex='0x100000')
while (sr.bytes[0] != '\x00') or (sr.bytes[1] != '\x00') or (sr.bytes[2] != '\x00'):
tmp = self.copy_counter(sr)
tmp = tmp & r3
if (tmp.bytes[0] != '\x00') or (tmp.bytes[1] != '\x00') or (tmp.bytes[2] != '\x00'):
# Step 2
n_ctr = BitArray(bytes=r8.bytes[ctr_offset:]) | sr
r8 = BitArray(bytes=r8.bytes[:ctr_offset]+n_ctr.bytes)
# Step 3
r8a = r8 ^ BitArray(bytes=curkey.bytes[right_offset:])
# Step 4
cipher = DES.new(curkey.bytes[:DES.key_size], DES.MODE_ECB)
r8a = BitArray(bytes=cipher.encrypt(r8a.bytes))
# Step 5
r8a = BitArray(bytes=curkey.bytes[right_offset:]) ^ r8a
# Step 6
curkey = curkey ^ c_mask
# Step 7
r8b = BitArray(bytes=curkey.bytes[right_offset:]) ^ r8
# Step 8
cipher = DES.new(curkey.bytes[:DES.key_size], DES.MODE_ECB)
r8b = BitArray(bytes=cipher.encrypt(r8b.bytes))
# Step 9
r8b = BitArray(bytes=curkey.bytes[right_offset:]) ^ r8b
# Step 10 / 11
curkey = BitArray(bytes=r8b.bytes+r8a.bytes)
sr >>= 1
self._cur_key = curkey
return curkey
def reset_counter(self, data):
"""Reset the counter to zero
Keyword arguments:
data (raw or BitArray) -- Must be at least 3 bytes
Return:
BitArray of the data passed in
"""
if isinstance(data, BitArray):
data = data.bytes
if len(data) < 3:
return None
mask = BitArray(hex='0xe00000')
ctr = BitArray(bytes=data[len(data)-3:])
return BitArray(bytes=data[:-3] + (mask & ctr).bytes)
def copy_counter(self, data):
"""Copy only the counter bytes from a given string or BitArray
Keyword arguments:
data (raw or BitArray) -- Must be at least 3 bytes
Return:
BitArray of only the counter bytes
"""
mask = BitArray(hex='0x1fffff')
if len(data.bytes) > 3:
ctr = BitArray(bytes=data.bytes[-3:])
else:
ctr = data
return mask & ctr
def increase_counter(self):
"""Increase the counter bytes of the stored ksn by one"""
ctr = self._ksn.cut(21, start=59).next().int + 1
self._ksn.overwrite('0b'+BitArray(int=ctr, length=21).bin, 59)