/// <summary> /// Construct a GroupSerializable object from a Group object. /// </summary> /// <param name="group">The Group object being serialized.</param> public GroupSerializable(Group group) { if (this.InRecommendedGroup(group.GroupName)) { this.type = "named"; this.name = group.GroupName; this.sgDesc = null; } else if (group.Type == GroupType.ECC) { this.type = "ec"; this.name = null; this.sgDesc = null; } else if (group.Type == GroupType.Subgroup) { this.type = "sg"; this.sgDesc = new SubgroupGroupSerializable((SubgroupGroup)group); this.name = null; } else { throw new UProveSerializationException("Invalid GroupConstruction"); } return; }
public static GroupElement CreateGroupElement(Group Gq, string value) { if (Gq is SubgroupGroup) { return Gq.CreateGroupElement(HexToBytes(value)); } else { ECGroup ecGq = Gq as ECGroup; string[] point = value.Split(','); return ecGq.CreateGroupElement(HexToBytes(point[0]), HexToBytes(point[1])); } }
/// <summary> /// Private constructor - takes and sets all fields. /// </summary> /// <param name="Gq">The group</param> /// <param name="gd">The device generator</param> /// <param name="Zq">The Field associated to the group <c>Gq</c></param> /// <param name="xd">The xd.</param> /// <param name="preGenWdPrime">The pre gen wd prime.</param> VirtualDevice(Group Gq, GroupElement gd, FieldZq Zq, FieldZqElement xd, FieldZqElement preGenWdPrime) { if (xd != null && !Zq.IsElement(xd)) { throw new ArgumentException("xd is not a valid Zq element"); } this.Gd = gd; this.Gq = Gq; this.Zq = Zq; this.xd = xd ?? this.Zq.GetRandomElement(true); // assign xd a random value if null this.wdPrime = preGenWdPrime; this.hd = this.Gd.Exponentiate(this.xd); }
/// <summary> /// Convert a base64 string to a GroupElement[] using a specific Group object. /// </summary> /// <param name="encodedElements">The encoded string to convert.</param> /// <param name="group">The group object to use.</param> /// <returns>The converted object.</returns> public static GroupElement[] ToGroupElementArray(this String[] encodedElements, Group group) { if (encodedElements == null) return null; if (group == null) throw new ArgumentNullException("group"); GroupElement[] groupElements = new GroupElement[encodedElements.Length]; for (int i = 0; i < encodedElements.Length; i++) { groupElements[i] = encodedElements[i].ToGroupElement(group); } return groupElements; }
/// <summary> /// Convert a base64 string to a GroupElement using a specific Group object. /// </summary> /// <param name="encodedString">The encoded string to convert.</param> /// <param name="group">The group object to use.</param> /// <returns>The converted object.</returns> public static GroupElement ToGroupElement(this String encodedString, Group group) { if (encodedString == null) return null; if (group == null) throw new ArgumentNullException("group"); return group.CreateGroupElement(encodedString.ToByteArray()); }
/// <summary> /// Hash a Group. /// </summary> /// <param name="value">A group to be hashed.</param> public void Hash(Group value) { value.UpdateHash(this); }
/// <summary> /// Create the group element associated with a scope. /// </summary> public static GroupElement GenerateScopeElement(Group Gq, byte[] scope) { int counter; return Gq.DeriveElement(scope, ScopeElementIndex, out counter); }