Guest User

Untitled

a guest
Jun 18th, 2018
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.93 KB | None | 0 0
  1. def mv(key,nn)
  2. print "in mv\n"
  3. init_curve(nn)
  4. mktable(@CRV_G_x,@CRV_G_y)
  5. ellip(key)
  6. print "Pubkey_x=",@Pub_key_x,"\n"
  7. print "Pubkey_y=",@Pub_key_y,"\n"
  8.  
  9.  
  10. #command = { 'e' => 0, 'd' => 1}[(ARGV[0]||'').strip.downcase]
  11. #data = ARGV[1] && IO.read(ARGV[1])
  12. #print "argv1=",ARGF.filename,"\n"
  13.  
  14. require 'securerandom'
  15.  
  16. f = File.open(ARGF.filename,"rb")
  17. g = File.open(ARGF.filename + ".ecc","wb")
  18. #=begin
  19. int=0
  20.  
  21. salt=SecureRandom.random_number(2**(32*8))
  22. # salt=[OpenSSL::Random.random_bytes(32)].pack("m")
  23. # salt.each_byte{|c| int=(int<<8)^c}
  24. # salt=int
  25. print "salt=",salt,"\n"
  26.  
  27. mktable(@Pub_key_x,@Pub_key_y)
  28. ellip(salt)
  29. print "salt*Pubkey_x=",@Pub_key_x,"\n"
  30. print "salt*Pubkey_y=",@Pub_key_y,"\n"
  31. @Gen_key_x=@Pub_key_x
  32. @Gen_key_y=@Pub_key_y
  33. for i in 0..10000
  34. @I[i]=0
  35. end
  36. ii=0
  37. mktable(@CRV_G_x,@CRV_G_y)
  38. ellip(salt)
  39. #=end
  40. while((str=f.read(32))!=nil)
  41. @I[ii]=str.size
  42. ii=ii+1
  43. c=0
  44. i=0
  45. salt=0
  46. str.each_byte{|c| salt=(salt<<8)^c}
  47. #print "length=",str.split(//s).length,"\n"
  48. eadd(@Gen_key_x,@CRV_G_x,@Gen_key_y,@CRV_G_y,@CRV_p)
  49. salt^=(@T_y%(2**8*str.size))
  50. @Gen_key_x=@T_x
  51. @Gen_key_y=@T_y
  52. =begin
  53. # 巨大な数 salt をバイトごとの配列に変換(packが使えないので原始的に)
  54. bytes = []
  55. while salt > 0
  56. salt, byte = salt >> 8, salt & 0xff
  57. bytes.unshift(byte) # 望むエンディアネスによっては push かも。
  58. end
  59. # バイトの配列をバイト文字列として書き出す
  60. open(ARGF.filename + ".ecc", 'wb') {|out| out.print(bytes.pack('C*')) }
  61. =end
  62. g.write(salt)
  63. g.write("\n")
  64. end
  65.  
  66.  
  67. f.close
  68. g.close
  69.  
  70. end
  71.  
  72.  
  73.  
  74. def dec(key,nn)
  75. print "in mv\n"
  76. init_curve(nn)
  77. mktable(@Pub_key_x,@Pub_key_y)
  78. ellip(key)
  79. print "dcPubkey_x=",@Pub_key_x,"\n"
  80. print "dcPubkey_y=",@Pub_key_y,"\n"
  81. salt=[32]
  82.  
  83.  
  84. #OpenSSL::Random.random_bytes(32)
  85.  
  86. #print "salt=",salt,"\n"
  87. command = { 'e' => 0, 'd' => 1}[(ARGV[0]||'').strip.downcase]
  88. data = ARGV[1] && IO.read(ARGV[1])
  89.  
  90. g = File.open(ARGF.filename + ".txt","wb")
  91. f = File.open(ARGF.filename + ".ecc","rb")
  92. lines = fields = 0
  93. ii=0
  94.  
  95.  
  96.  
  97. open(ARGF.filename + ".ecc") {|file|
  98. while l = file.gets
  99. l=l.to_i
  100. ls=@I[ii]
  101. ii=ii+1
  102.  
  103. =begin
  104. value = 0
  105. # バイナリデータを読み込んでバイト列に分解
  106. raw = open(ARGF.filename + ".ecc"){|f| f.read.unpack('C*')}
  107. # 数を復元
  108. until raw.empty?
  109. value = (value << 8) + raw.shift
  110. end
  111. l=value
  112. =end
  113.  
  114. #print "l=",ls,"\n"
  115. eadd(@Pub_key_x,@CRV_G_x,@Pub_key_y,@CRV_G_y,@CRV_p)
  116. @Pub_key_x=@T_x
  117. @Pub_key_y=@T_y
  118. lines += 1
  119. fields += l.to_s.split(',').size
  120. l^=(@T_y%(2**8*ls))
  121. for i in 0..31
  122. salt[i]=0
  123. end
  124. while(l>0)
  125. i=0
  126. while(i<ls)
  127. salt[i]=l&0xff
  128. salt[i]=sprintf("%c",salt[i])
  129. l=(l>>8)
  130. i=i+1
  131. end
  132. end
  133. i=ls-1
  134. while(i>-1)
  135. g.write(salt[i])
  136. i=i-1
  137. end
  138. end
  139. }
  140. puts "Total #{lines} lines, #{fields} fields"
  141.  
  142. #print "length=",str.split(//s).length,"\n"
  143.  
  144. f.close
  145. g.close
  146.  
  147. end
Add Comment
Please, Sign In to add comment