summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCoprDistGit <infra@openeuler.org>2023-05-18 06:57:12 +0000
committerCoprDistGit <infra@openeuler.org>2023-05-18 06:57:12 +0000
commit8dede44599405dda3b4dbd98f29836ad7047de34 (patch)
tree4241e45bfdd4c19f294a7fd833a48712f9ec39b1
parent1f6e673062860b06243ee58f165cf7ab86b79392 (diff)
automatic import of python-mkm
-rw-r--r--.gitignore1
-rw-r--r--python-mkm.spec591
-rw-r--r--sources1
3 files changed, 593 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index e69de29..747f983 100644
--- a/.gitignore
+++ b/.gitignore
@@ -0,0 +1 @@
+/mkm-0.12.6.tar.gz
diff --git a/python-mkm.spec b/python-mkm.spec
new file mode 100644
index 0000000..32dc929
--- /dev/null
+++ b/python-mkm.spec
@@ -0,0 +1,591 @@
+%global _empty_manifest_terminate_build 0
+Name: python-mkm
+Version: 0.12.6
+Release: 1
+Summary: A common identity module
+License: MIT
+URL: https://github.com/dimchat/mkm-py
+Source0: https://mirrors.nju.edu.cn/pypi/web/packages/34/90/33bd7c2c7263fcfd89a14e1253a13004166eda2c845fac8ab13f4de233b4/mkm-0.12.6.tar.gz
+BuildArch: noarch
+
+
+%description
+# Ming Ke Ming (名可名) -- Account Module (Python)
+
+[![license](https://img.shields.io/github/license/mashape/apistatus.svg)](https://github.com/dimchat/mkm-py/blob/master/LICENSE)
+[![Version](https://img.shields.io/badge/alpha-0.10.12-red.svg)](https://github.com/dimchat/mkm-py/wiki)
+[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](https://github.com/dimchat/mkm-py/pulls)
+[![Platform](https://img.shields.io/badge/Platform-Python%203-brightgreen.svg)](https://github.com/dimchat/mkm-py/wiki)
+
+This [document](https://github.com/moky/DIMP/blob/master/MingKeMing-Identity.md) introduces a common **Account Module** for decentralized user identity authentication.
+
+Copyright &copy; 2018-2019 Albert Moky
+
+- [Meta](#meta)
+ - [Type](#meta-type)
+ - [Key](#meta-key)
+ - [Seed](#meta-seed)
+ - [Fingerprint](#meta-fingerprint)
+- [ID](#id)
+ - [Type](#id-type)
+ - [Name](#id-name)
+ - [Address](#id-address)
+ - [Terminal](#id-terminal)
+- [Samples](#samples)
+
+## <span id="meta">0. Meta</span>
+
+The **Meta** was generated by your **private key**, it can be used to build a new ID for entity, or verify the ID/PK pair.
+
+It consists of 4 fields:
+
+| Field | Description |
+| ----------- | ----------------------------- |
+| type | Meta Algorithm Version |
+| key | Public Key |
+| seed | Entity Name |
+| fingerprint | Signature to generate address |
+
+### <span id="meta-type">0.0. Meta Type</span>
+
+* ```0x01``` **Default version**
+* ```0x02``` BTC version
+* ```0x03``` Extended BTC version
+* ```0x04``` ETH version
+* ```0x05``` Extended ETH version
+
+### <span id="meta-key">0.1. Key</span>
+
+A **public key** (PK) was bound to an ID by the **Meta Algorithm**.
+
+### <span id="meta-seed">0.2. Seed</span>
+
+A string as same as **ID.name** for generate the fingerprint.
+
+### <span id="meta-fingerprint">0.3. Fingerprint</span>
+
+THe **fingerprint** field was generated by your **private key** and **seed**:
+
+````python
+data = seed.encode('utf-8')
+fingerprint = private_key.sign(data)
+````
+
+## <span id="id">1. ID</span>
+The **ID** is used to identify an **entity**(user/group). It consists of 3 fields and 2 extended properties:
+
+| Field | Description |
+| ----------- | ----------------------------- |
+| name | Same with meta.seed |
+| address | Unique Identification |
+| terminal | Login point, it's optional. |
+| type | Network type |
+
+The ID format is ```name@address[/terminal]```.
+
+### <span id="id-type">1.0. ID Type</span>
+
+The **network type** of a person is ```8```, and group is ```16```:
+
+```python
+class NetworkType(IntEnum):
+ # Person Account
+ MAIN = 0x08 # 0000 1000 (Person)
+
+ # Virtual Groups
+ GROUP = 0x10 # 0001 0000 (Multi-Persons)
+ POLYLOGUE = 0x10 # 0001 0000 (Multi-Persons Chat, N < 100)
+ CHATROOM = 0x30 # 0011 0000 (Multi-Persons Chat, N >= 100)
+
+ # Network
+ PROVIDER = 0x76 # 0111 0110 (Service Provider)
+ STATION = 0x88 # 1000 1000 (Server Node)
+
+ # Internet of Things
+ THING = 0x80 # 1000 0000 (IoT)
+ ROBOT = 0xC8 # 1100 1000
+```
+
+### <span id="id-name">1.1. Name</span>
+The **Name** field is a username, or just a random string for group:
+
+1. The length of name must more than 1 byte, less than 32 bytes;
+2. It should be composed by a-z, A-Z, 0-9, or charactors '_', '-', '.';
+3. It cannot contain key charactors('@', '/').
+
+```python
+# Name examples
+user_name = "Albert.Moky"
+group_name = "Group-9527"
+```
+
+### <span id="id-address">1.2. Address</span>
+
+The **Address** field was created with the **Fingerprint** in Meta and a **Network ID**:
+
+```python
+def check_code(data: bytes) -> bytes:
+ # check code in BTC address
+ return sha256(sha256(data))[:4]
+
+class BTCAddress(Address):
+
+ @classmethod
+ def new(cls, data: bytes, network: NetworkType=0) -> Address:
+ """Generate address with fingerprint and network ID
+ :param data: fingerprint (signature/key.data)
+ :param network: address type
+ :return: Address object
+ """
+ prefix = chr(network).encode('latin1')
+ digest = ripemd160(sha256(data))
+ code = check_code(prefix + digest)
+ address = base58_encode(prefix + digest + code)
+ return BTCAddress(address)
+```
+
+When you get a meta for the entity ID from the network,
+you must verify it with the consensus algorithm before accept its **public key**.
+
+### <span id="id-terminal">1.3. Terminal</span>
+
+A resource identifier as **Login Point**.
+
+## <span id="samples">2. Samples</span>
+
+### ID
+
+```python
+# ID examples
+ID1 = "hulk@4YeVEN3aUnvC1DNUufCq1bs9zoBSJTzVEj" # Immortal Hulk
+ID2 = "moki@4WDfe3zZ4T7opFSi3iDAKiuTnUHjxmXekk" # Monkey King
+```
+
+### Meta
+
+```javascript
+/* Meta(JsON) for hulk@4YeVEN3aUnvC1DNUufCq1bs9zoBSJTzVEj */
+{
+ "version" : 0x01,
+ "key" : {
+ "algorithm" : "RSA",
+ "data" : "-----BEGIN PUBLIC KEY-----\nMIGJAoGBALB+vbUK48UU9rjlgnohQowME+3JtTb2hLPqtatVOW364/EKFq0/PSdnZVE9V2Zq+pbX7dj3nCS4pWnYf40ELH8wuDm0Tc4jQ70v4LgAcdy3JGTnWUGiCsY+0Z8kNzRkm3FJid592FL7ryzfvIzB9bjg8U2JqlyCVAyUYEnKv4lDAgMBAAE=\n-----END PUBLIC KEY-----",
+ // other parameters
+ "mode" : "ECB",
+ "padding" : "PKCS1",
+ "digest" : "SHA256"
+ },
+ "seed" : "hulk",
+ "fingerprint" : "jIPGWpWSbR/DQH6ol3t9DSFkYroVHQDvtbJErmFztMUP2DgRrRSNWuoKY5Y26qL38wfXJQXjYiWqNWKQmQe/gK8M8NkU7lRwm+2nh9wSBYV6Q4WXsCboKbnM0+HVn9Vdfp21hMMGrxTX1pBPRbi0567ZjNQC8ffdW2WvQSoec2I="
+}
+```
+
+(All data encode with **BASE64** algorithm as default, excepts the **address**)
+
+
+
+
+%package -n python3-mkm
+Summary: A common identity module
+Provides: python-mkm
+BuildRequires: python3-devel
+BuildRequires: python3-setuptools
+BuildRequires: python3-pip
+%description -n python3-mkm
+# Ming Ke Ming (名可名) -- Account Module (Python)
+
+[![license](https://img.shields.io/github/license/mashape/apistatus.svg)](https://github.com/dimchat/mkm-py/blob/master/LICENSE)
+[![Version](https://img.shields.io/badge/alpha-0.10.12-red.svg)](https://github.com/dimchat/mkm-py/wiki)
+[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](https://github.com/dimchat/mkm-py/pulls)
+[![Platform](https://img.shields.io/badge/Platform-Python%203-brightgreen.svg)](https://github.com/dimchat/mkm-py/wiki)
+
+This [document](https://github.com/moky/DIMP/blob/master/MingKeMing-Identity.md) introduces a common **Account Module** for decentralized user identity authentication.
+
+Copyright &copy; 2018-2019 Albert Moky
+
+- [Meta](#meta)
+ - [Type](#meta-type)
+ - [Key](#meta-key)
+ - [Seed](#meta-seed)
+ - [Fingerprint](#meta-fingerprint)
+- [ID](#id)
+ - [Type](#id-type)
+ - [Name](#id-name)
+ - [Address](#id-address)
+ - [Terminal](#id-terminal)
+- [Samples](#samples)
+
+## <span id="meta">0. Meta</span>
+
+The **Meta** was generated by your **private key**, it can be used to build a new ID for entity, or verify the ID/PK pair.
+
+It consists of 4 fields:
+
+| Field | Description |
+| ----------- | ----------------------------- |
+| type | Meta Algorithm Version |
+| key | Public Key |
+| seed | Entity Name |
+| fingerprint | Signature to generate address |
+
+### <span id="meta-type">0.0. Meta Type</span>
+
+* ```0x01``` **Default version**
+* ```0x02``` BTC version
+* ```0x03``` Extended BTC version
+* ```0x04``` ETH version
+* ```0x05``` Extended ETH version
+
+### <span id="meta-key">0.1. Key</span>
+
+A **public key** (PK) was bound to an ID by the **Meta Algorithm**.
+
+### <span id="meta-seed">0.2. Seed</span>
+
+A string as same as **ID.name** for generate the fingerprint.
+
+### <span id="meta-fingerprint">0.3. Fingerprint</span>
+
+THe **fingerprint** field was generated by your **private key** and **seed**:
+
+````python
+data = seed.encode('utf-8')
+fingerprint = private_key.sign(data)
+````
+
+## <span id="id">1. ID</span>
+The **ID** is used to identify an **entity**(user/group). It consists of 3 fields and 2 extended properties:
+
+| Field | Description |
+| ----------- | ----------------------------- |
+| name | Same with meta.seed |
+| address | Unique Identification |
+| terminal | Login point, it's optional. |
+| type | Network type |
+
+The ID format is ```name@address[/terminal]```.
+
+### <span id="id-type">1.0. ID Type</span>
+
+The **network type** of a person is ```8```, and group is ```16```:
+
+```python
+class NetworkType(IntEnum):
+ # Person Account
+ MAIN = 0x08 # 0000 1000 (Person)
+
+ # Virtual Groups
+ GROUP = 0x10 # 0001 0000 (Multi-Persons)
+ POLYLOGUE = 0x10 # 0001 0000 (Multi-Persons Chat, N < 100)
+ CHATROOM = 0x30 # 0011 0000 (Multi-Persons Chat, N >= 100)
+
+ # Network
+ PROVIDER = 0x76 # 0111 0110 (Service Provider)
+ STATION = 0x88 # 1000 1000 (Server Node)
+
+ # Internet of Things
+ THING = 0x80 # 1000 0000 (IoT)
+ ROBOT = 0xC8 # 1100 1000
+```
+
+### <span id="id-name">1.1. Name</span>
+The **Name** field is a username, or just a random string for group:
+
+1. The length of name must more than 1 byte, less than 32 bytes;
+2. It should be composed by a-z, A-Z, 0-9, or charactors '_', '-', '.';
+3. It cannot contain key charactors('@', '/').
+
+```python
+# Name examples
+user_name = "Albert.Moky"
+group_name = "Group-9527"
+```
+
+### <span id="id-address">1.2. Address</span>
+
+The **Address** field was created with the **Fingerprint** in Meta and a **Network ID**:
+
+```python
+def check_code(data: bytes) -> bytes:
+ # check code in BTC address
+ return sha256(sha256(data))[:4]
+
+class BTCAddress(Address):
+
+ @classmethod
+ def new(cls, data: bytes, network: NetworkType=0) -> Address:
+ """Generate address with fingerprint and network ID
+ :param data: fingerprint (signature/key.data)
+ :param network: address type
+ :return: Address object
+ """
+ prefix = chr(network).encode('latin1')
+ digest = ripemd160(sha256(data))
+ code = check_code(prefix + digest)
+ address = base58_encode(prefix + digest + code)
+ return BTCAddress(address)
+```
+
+When you get a meta for the entity ID from the network,
+you must verify it with the consensus algorithm before accept its **public key**.
+
+### <span id="id-terminal">1.3. Terminal</span>
+
+A resource identifier as **Login Point**.
+
+## <span id="samples">2. Samples</span>
+
+### ID
+
+```python
+# ID examples
+ID1 = "hulk@4YeVEN3aUnvC1DNUufCq1bs9zoBSJTzVEj" # Immortal Hulk
+ID2 = "moki@4WDfe3zZ4T7opFSi3iDAKiuTnUHjxmXekk" # Monkey King
+```
+
+### Meta
+
+```javascript
+/* Meta(JsON) for hulk@4YeVEN3aUnvC1DNUufCq1bs9zoBSJTzVEj */
+{
+ "version" : 0x01,
+ "key" : {
+ "algorithm" : "RSA",
+ "data" : "-----BEGIN PUBLIC KEY-----\nMIGJAoGBALB+vbUK48UU9rjlgnohQowME+3JtTb2hLPqtatVOW364/EKFq0/PSdnZVE9V2Zq+pbX7dj3nCS4pWnYf40ELH8wuDm0Tc4jQ70v4LgAcdy3JGTnWUGiCsY+0Z8kNzRkm3FJid592FL7ryzfvIzB9bjg8U2JqlyCVAyUYEnKv4lDAgMBAAE=\n-----END PUBLIC KEY-----",
+ // other parameters
+ "mode" : "ECB",
+ "padding" : "PKCS1",
+ "digest" : "SHA256"
+ },
+ "seed" : "hulk",
+ "fingerprint" : "jIPGWpWSbR/DQH6ol3t9DSFkYroVHQDvtbJErmFztMUP2DgRrRSNWuoKY5Y26qL38wfXJQXjYiWqNWKQmQe/gK8M8NkU7lRwm+2nh9wSBYV6Q4WXsCboKbnM0+HVn9Vdfp21hMMGrxTX1pBPRbi0567ZjNQC8ffdW2WvQSoec2I="
+}
+```
+
+(All data encode with **BASE64** algorithm as default, excepts the **address**)
+
+
+
+
+%package help
+Summary: Development documents and examples for mkm
+Provides: python3-mkm-doc
+%description help
+# Ming Ke Ming (名可名) -- Account Module (Python)
+
+[![license](https://img.shields.io/github/license/mashape/apistatus.svg)](https://github.com/dimchat/mkm-py/blob/master/LICENSE)
+[![Version](https://img.shields.io/badge/alpha-0.10.12-red.svg)](https://github.com/dimchat/mkm-py/wiki)
+[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](https://github.com/dimchat/mkm-py/pulls)
+[![Platform](https://img.shields.io/badge/Platform-Python%203-brightgreen.svg)](https://github.com/dimchat/mkm-py/wiki)
+
+This [document](https://github.com/moky/DIMP/blob/master/MingKeMing-Identity.md) introduces a common **Account Module** for decentralized user identity authentication.
+
+Copyright &copy; 2018-2019 Albert Moky
+
+- [Meta](#meta)
+ - [Type](#meta-type)
+ - [Key](#meta-key)
+ - [Seed](#meta-seed)
+ - [Fingerprint](#meta-fingerprint)
+- [ID](#id)
+ - [Type](#id-type)
+ - [Name](#id-name)
+ - [Address](#id-address)
+ - [Terminal](#id-terminal)
+- [Samples](#samples)
+
+## <span id="meta">0. Meta</span>
+
+The **Meta** was generated by your **private key**, it can be used to build a new ID for entity, or verify the ID/PK pair.
+
+It consists of 4 fields:
+
+| Field | Description |
+| ----------- | ----------------------------- |
+| type | Meta Algorithm Version |
+| key | Public Key |
+| seed | Entity Name |
+| fingerprint | Signature to generate address |
+
+### <span id="meta-type">0.0. Meta Type</span>
+
+* ```0x01``` **Default version**
+* ```0x02``` BTC version
+* ```0x03``` Extended BTC version
+* ```0x04``` ETH version
+* ```0x05``` Extended ETH version
+
+### <span id="meta-key">0.1. Key</span>
+
+A **public key** (PK) was bound to an ID by the **Meta Algorithm**.
+
+### <span id="meta-seed">0.2. Seed</span>
+
+A string as same as **ID.name** for generate the fingerprint.
+
+### <span id="meta-fingerprint">0.3. Fingerprint</span>
+
+THe **fingerprint** field was generated by your **private key** and **seed**:
+
+````python
+data = seed.encode('utf-8')
+fingerprint = private_key.sign(data)
+````
+
+## <span id="id">1. ID</span>
+The **ID** is used to identify an **entity**(user/group). It consists of 3 fields and 2 extended properties:
+
+| Field | Description |
+| ----------- | ----------------------------- |
+| name | Same with meta.seed |
+| address | Unique Identification |
+| terminal | Login point, it's optional. |
+| type | Network type |
+
+The ID format is ```name@address[/terminal]```.
+
+### <span id="id-type">1.0. ID Type</span>
+
+The **network type** of a person is ```8```, and group is ```16```:
+
+```python
+class NetworkType(IntEnum):
+ # Person Account
+ MAIN = 0x08 # 0000 1000 (Person)
+
+ # Virtual Groups
+ GROUP = 0x10 # 0001 0000 (Multi-Persons)
+ POLYLOGUE = 0x10 # 0001 0000 (Multi-Persons Chat, N < 100)
+ CHATROOM = 0x30 # 0011 0000 (Multi-Persons Chat, N >= 100)
+
+ # Network
+ PROVIDER = 0x76 # 0111 0110 (Service Provider)
+ STATION = 0x88 # 1000 1000 (Server Node)
+
+ # Internet of Things
+ THING = 0x80 # 1000 0000 (IoT)
+ ROBOT = 0xC8 # 1100 1000
+```
+
+### <span id="id-name">1.1. Name</span>
+The **Name** field is a username, or just a random string for group:
+
+1. The length of name must more than 1 byte, less than 32 bytes;
+2. It should be composed by a-z, A-Z, 0-9, or charactors '_', '-', '.';
+3. It cannot contain key charactors('@', '/').
+
+```python
+# Name examples
+user_name = "Albert.Moky"
+group_name = "Group-9527"
+```
+
+### <span id="id-address">1.2. Address</span>
+
+The **Address** field was created with the **Fingerprint** in Meta and a **Network ID**:
+
+```python
+def check_code(data: bytes) -> bytes:
+ # check code in BTC address
+ return sha256(sha256(data))[:4]
+
+class BTCAddress(Address):
+
+ @classmethod
+ def new(cls, data: bytes, network: NetworkType=0) -> Address:
+ """Generate address with fingerprint and network ID
+ :param data: fingerprint (signature/key.data)
+ :param network: address type
+ :return: Address object
+ """
+ prefix = chr(network).encode('latin1')
+ digest = ripemd160(sha256(data))
+ code = check_code(prefix + digest)
+ address = base58_encode(prefix + digest + code)
+ return BTCAddress(address)
+```
+
+When you get a meta for the entity ID from the network,
+you must verify it with the consensus algorithm before accept its **public key**.
+
+### <span id="id-terminal">1.3. Terminal</span>
+
+A resource identifier as **Login Point**.
+
+## <span id="samples">2. Samples</span>
+
+### ID
+
+```python
+# ID examples
+ID1 = "hulk@4YeVEN3aUnvC1DNUufCq1bs9zoBSJTzVEj" # Immortal Hulk
+ID2 = "moki@4WDfe3zZ4T7opFSi3iDAKiuTnUHjxmXekk" # Monkey King
+```
+
+### Meta
+
+```javascript
+/* Meta(JsON) for hulk@4YeVEN3aUnvC1DNUufCq1bs9zoBSJTzVEj */
+{
+ "version" : 0x01,
+ "key" : {
+ "algorithm" : "RSA",
+ "data" : "-----BEGIN PUBLIC KEY-----\nMIGJAoGBALB+vbUK48UU9rjlgnohQowME+3JtTb2hLPqtatVOW364/EKFq0/PSdnZVE9V2Zq+pbX7dj3nCS4pWnYf40ELH8wuDm0Tc4jQ70v4LgAcdy3JGTnWUGiCsY+0Z8kNzRkm3FJid592FL7ryzfvIzB9bjg8U2JqlyCVAyUYEnKv4lDAgMBAAE=\n-----END PUBLIC KEY-----",
+ // other parameters
+ "mode" : "ECB",
+ "padding" : "PKCS1",
+ "digest" : "SHA256"
+ },
+ "seed" : "hulk",
+ "fingerprint" : "jIPGWpWSbR/DQH6ol3t9DSFkYroVHQDvtbJErmFztMUP2DgRrRSNWuoKY5Y26qL38wfXJQXjYiWqNWKQmQe/gK8M8NkU7lRwm+2nh9wSBYV6Q4WXsCboKbnM0+HVn9Vdfp21hMMGrxTX1pBPRbi0567ZjNQC8ffdW2WvQSoec2I="
+}
+```
+
+(All data encode with **BASE64** algorithm as default, excepts the **address**)
+
+
+
+
+%prep
+%autosetup -n mkm-0.12.6
+
+%build
+%py3_build
+
+%install
+%py3_install
+install -d -m755 %{buildroot}/%{_pkgdocdir}
+if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi
+if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi
+if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi
+if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi
+pushd %{buildroot}
+if [ -d usr/lib ]; then
+ find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/lib64 ]; then
+ find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/bin ]; then
+ find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/sbin ]; then
+ find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+touch doclist.lst
+if [ -d usr/share/man ]; then
+ find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst
+fi
+popd
+mv %{buildroot}/filelist.lst .
+mv %{buildroot}/doclist.lst .
+
+%files -n python3-mkm -f filelist.lst
+%dir %{python3_sitelib}/*
+
+%files help -f doclist.lst
+%{_docdir}/*
+
+%changelog
+* Thu May 18 2023 Python_Bot <Python_Bot@openeuler.org> - 0.12.6-1
+- Package Spec generated
diff --git a/sources b/sources
new file mode 100644
index 0000000..d95f4ad
--- /dev/null
+++ b/sources
@@ -0,0 +1 @@
+befc0241d15f297b025df015cdb4036d mkm-0.12.6.tar.gz