Project Moscato Team Messaging Middleware Implemetation Message Middleware by Golang Operate as Secure, Effectively
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

secure.go 2.0KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. package modules
  2. import (
  3. "fmt"
  4. "strconv"
  5. )
  6. // 키관리 부분, 노드 입력받고 키 반환하는 부분 구현
  7. type Security struct{
  8. KeyMap map[string] string
  9. }
  10. func NewSecurity() *Security{
  11. security := &Security{map[string] string{}}
  12. return security
  13. }
  14. type SecurityManager interface {
  15. RegKey(ksm KeyShareMsg)
  16. GetNodeKey(message Message) int64
  17. ReEncrypt(fromKey int64, toKey int64, target []int64) []int64
  18. CompareTopic(topic1 []int64, topic2 []int64) int
  19. CompareDigit(topic1 int64, topic2 int64) int
  20. CompareAlpha(topic1 []int64, topic2 []int64) int
  21. }
  22. /**
  23. keyShareMsg 에서 각 노드의 private 키를 받아 keyMap 에 저장
  24. */
  25. func (sc Security) RegKey(ksm KeyShareMsg) {
  26. sc.KeyMap[ksm.Message.From()] = ksm.key
  27. }
  28. /**
  29. 각 노드의 키를 주소를 이용하여 맵에서 가져옴
  30. */
  31. func (sc Security) GetNodeKey(message Message) int64{
  32. messageStringKey := sc.KeyMap[message.From()]
  33. mKey, err := strconv.ParseInt(messageStringKey, 10,64)
  34. if err != nil {
  35. fmt.Println("reEncrypt Error: key string to int64 parsing error.")
  36. }
  37. return mKey
  38. }
  39. /**
  40. reEncrypt 해서 슬라이스 반환
  41. */
  42. func (sc Security) ReEncrypt(fromKey int64, toKey int64, target []int64) []int64{
  43. for index := range target {
  44. target[index] = target[index] - fromKey + toKey
  45. }
  46. return target
  47. }
  48. /**
  49. Compare 함수들은 같으면 0 다르면 -1 (비교가 필요한 경우 오름차순 1 내림차순 -1)
  50. */
  51. func (sc Security) CompareTopic(topic1 []int64, topic2 []int64) int {
  52. for i := 0; i< len(topic2); i++ {
  53. if topic1[i] != topic2[i] {
  54. return -1
  55. }
  56. }
  57. return 0
  58. }
  59. func (sc Security) CompareDigit(topic1 int64, topic2 int64) int {
  60. if topic1 < topic2 {
  61. return 1
  62. } else if topic1 > topic2 {
  63. return -1
  64. }
  65. return 0
  66. }
  67. func (sc Security) CompareAlpha(topic1 []int64, topic2 []int64) int {
  68. for i := 0; i< len(topic2); i++ {
  69. if topic1[i] != topic2[i] {
  70. return -1
  71. }
  72. }
  73. return 0
  74. }
  75. // private key 생성 메세지
  76. //func (sc Security) keyGenPrivate() KeyGenMsg{
  77. //
  78. //}