Repository files navigation

PyPinkSign

Python code for PKI certificate. 공인인증서(공동인증서)를 다루는 파이썬 코드입니다.

Status

Buildcodecov

Support method

Usage example

Load public key file and private key file.

importpypinksignp=pypinksign.PinkSign()
p.load_pubkey(pubkey_path="/path/signCert.der")
p.load_prikey(prikey_path="/path/signPri.key", prikey_password=b"my-0wn-S3cret")
sign=p.sign(b'1') verify=p.verify(sign, b'1') # True

Load specific certificate. (by CN)

importpypinksign# choose_cert function automatically fetch path for certificates# and load certificate which match CN and passpharase for Private Keyp=pypinksign.choose_cert(cn="홍길순", pw=b"i-am-h0ng")
sign=p.sign(b'1') verify=p.verify(sign, b'1') # Trueenvelop=p.pkcs7_signed_msg(b'message') # PKCS7 signed with K-PKI

Load PFX(p12) certificate.

importpypinksign# choose_cert function automatically fetch path for certificates# and load certificate which match DN and passpharase for Private Keyp=pypinksign.PinkSign(p12_path="홍길순.pfx", prikey_password=b"i-am-h0ng")
sign=p.sign(b'1') verify=p.verify(sign, b'1') # Trueenvelop=p.pkcs7_enveloped_msg(b'message') # Envelop with K-PKI - Temporary removed

Requirement & Dependency

  • Python 3.8 or above
  • PyASN1 for pyasn1
  • cryptography for cryptography.hazmat
  • OpenSSL 1.1.1 or above due to cryptography package

Installation

The easiest way to get PyPinkSign is pip

pip install pypinksign

The current development version can be found at http://github.com/bandoche/pypinksign/tarball/main

Changelog

v0.5.4 (2025-10-17)

  • Update dependency (cryptography>=46.0.3) to include latest security patches and compatibility updates.
  • Require OpenSSL 3.0.0 or newer.
  • Add Python 3.14 support.

v0.5.3 (2025-02-22)

  • Update dependency (cryptography==44.0.1) to resolves multiple vulnerabilities.
  • Update dependency (pyasn1==0.6.1) to support recent python versions.
  • Update cryptography deprecations. (move SEED algo, use not_valid_before/after_utc) (thanks to kerokim)
  • Drop Python 3.7 support.

v0.5.2 (2024-12-21)

  • Update dependency (cryptography==42.0.8) to resolves multiple vulnerabilities.

v0.5.1 (2022-11-02)

  • Update dependency (cryptography==38.0.3) which resolves CVE-2022-3602 and CVE-2022-3786.

v0.5.0 (2022-01-18)

  • Upgrade dependency. (cryptography==36.0.1)
  • Fix file handle leakage.

v0.4.5 (2020-12-03)

v0.4.4 (2020-12-03)

  • Fix CRT related param error.
  • Remove PyOpenSSL dependency.
  • Remove old OpenSSL version dependency with pure SEED implementation.
    • If SEED algorithm is not supported by local OpenSSL, use python version of SEED algorithm automatically.

v0.4.3 (2020-02-26)

  • Fix seed_generator to generate bytes.

v0.4.2 (2020-02-26)

  • Test code fix.

v0.4.1 (2020-02-26)

  • Add PKCS7 sign message.

v0.4 (2020-02-26)

  • Drop Python 2 support.
  • Support Python 3.6 or above.
  • Add type hinting.
  • Add test code.
  • Add PBKDF2 for support PBES2 private key. (by [yongminz])
  • Add function to inject r (rand num) value to private key.
  • Update pyasn1 to 0.4.8.
  • Update cryptography to 2.8.
  • Update pyOpenSSL to 19.1.0.
  • Temporary remove enveloping function.

v0.3 (2017-03-14)

  • Add support for PFX (PKCS 12).
  • Add PyOpenSSL module for PFX support.
  • Remove PBKDF1 module.

v0.2.3 (2016-09-19)

  • Update cryptography dependency version to 1.5.

v0.2.2 (2016-07-25)

  • You can load private key file from string.
  • Update Docstring format.

v0.2.1 (2016-06-23)

  • Bug fix.

v0.2 (2016-06-21)

  • Add function for get serial number of cert.
  • Remove README.rst in repository.

v0.1.1 (2015-06-07)

  • Add README.rst for PyPI.

v0.1 (2015-06-07)

  • First release.

Thanks to

See also

About

PinkSign – a friendly Python library for NPKI (공동인증서, 구 공인인증서) certificates 🔑

Topics

Resources

Stars

112 stars

Watchers

12 watching

Forks

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

PyPinkSign

Python code for PKI certificate. 공인인증서(공동인증서)를 다루는 파이썬 코드입니다.

Status

Buildcodecov

Support method

Usage example

Load public key file and private key file.

importpypinksignp=pypinksign.PinkSign()
p.load_pubkey(pubkey_path="/path/signCert.der")
p.load_prikey(prikey_path="/path/signPri.key", prikey_password=b"my-0wn-S3cret")
sign=p.sign(b'1') verify=p.verify(sign, b'1') # True

Load specific certificate. (by CN)

importpypinksign# choose_cert function automatically fetch path for certificates# and load certificate which match CN and passpharase for Private Keyp=pypinksign.choose_cert(cn="홍길순", pw=b"i-am-h0ng")
sign=p.sign(b'1') verify=p.verify(sign, b'1') # Trueenvelop=p.pkcs7_signed_msg(b'message') # PKCS7 signed with K-PKI

Load PFX(p12) certificate.

importpypinksign# choose_cert function automatically fetch path for certificates# and load certificate which match DN and passpharase for Private Keyp=pypinksign.PinkSign(p12_path="홍길순.pfx", prikey_password=b"i-am-h0ng")
sign=p.sign(b'1') verify=p.verify(sign, b'1') # Trueenvelop=p.pkcs7_enveloped_msg(b'message') # Envelop with K-PKI - Temporary removed

Requirement & Dependency

  • Python 3.8 or above
  • PyASN1 for pyasn1
  • cryptography for cryptography.hazmat
  • OpenSSL 1.1.1 or above due to cryptography package

Installation

The easiest way to get PyPinkSign is pip

pip install pypinksign

The current development version can be found at http://github.com/bandoche/pypinksign/tarball/main

Changelog

v0.5.4 (2025-10-17)

  • Update dependency (cryptography>=46.0.3) to include latest security patches and compatibility updates.
  • Require OpenSSL 3.0.0 or newer.
  • Add Python 3.14 support.

v0.5.3 (2025-02-22)

  • Update dependency (cryptography==44.0.1) to resolves multiple vulnerabilities.
  • Update dependency (pyasn1==0.6.1) to support recent python versions.
  • Update cryptography deprecations. (move SEED algo, use not_valid_before/after_utc) (thanks to kerokim)
  • Drop Python 3.7 support.

v0.5.2 (2024-12-21)

  • Update dependency (cryptography==42.0.8) to resolves multiple vulnerabilities.

v0.5.1 (2022-11-02)

  • Update dependency (cryptography==38.0.3) which resolves CVE-2022-3602 and CVE-2022-3786.

v0.5.0 (2022-01-18)

  • Upgrade dependency. (cryptography==36.0.1)
  • Fix file handle leakage.

v0.4.5 (2020-12-03)

v0.4.4 (2020-12-03)

  • Fix CRT related param error.
  • Remove PyOpenSSL dependency.
  • Remove old OpenSSL version dependency with pure SEED implementation.
    • If SEED algorithm is not supported by local OpenSSL, use python version of SEED algorithm automatically.

v0.4.3 (2020-02-26)

  • Fix seed_generator to generate bytes.

v0.4.2 (2020-02-26)

  • Test code fix.

v0.4.1 (2020-02-26)

  • Add PKCS7 sign message.

v0.4 (2020-02-26)

  • Drop Python 2 support.
  • Support Python 3.6 or above.
  • Add type hinting.
  • Add test code.
  • Add PBKDF2 for support PBES2 private key. (by [yongminz])
  • Add function to inject r (rand num) value to private key.
  • Update pyasn1 to 0.4.8.
  • Update cryptography to 2.8.
  • Update pyOpenSSL to 19.1.0.
  • Temporary remove enveloping function.

v0.3 (2017-03-14)

  • Add support for PFX (PKCS 12).
  • Add PyOpenSSL module for PFX support.
  • Remove PBKDF1 module.

v0.2.3 (2016-09-19)

  • Update cryptography dependency version to 1.5.

v0.2.2 (2016-07-25)

  • You can load private key file from string.
  • Update Docstring format.

v0.2.1 (2016-06-23)

  • Bug fix.

v0.2 (2016-06-21)

  • Add function for get serial number of cert.
  • Remove README.rst in repository.

v0.1.1 (2015-06-07)

  • Add README.rst for PyPI.

v0.1 (2015-06-07)

  • First release.

Thanks to

See also

About

PinkSign – a friendly Python library for NPKI (공동인증서, 구 공인인증서) certificates 🔑

Topics

Resources

Stars

112 stars

Watchers

12 watching

Forks

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

PyPinkSign

Python code for PKI certificate. 공인인증서(공동인증서)를 다루는 파이썬 코드입니다.

Status

Buildcodecov

Support method

Usage example

Load public key file and private key file.

importpypinksignp=pypinksign.PinkSign()
p.load_pubkey(pubkey_path="/path/signCert.der")
p.load_prikey(prikey_path="/path/signPri.key", prikey_password=b"my-0wn-S3cret")
sign=p.sign(b'1') verify=p.verify(sign, b'1') # True

Load specific certificate. (by CN)

importpypinksign# choose_cert function automatically fetch path for certificates# and load certificate which match CN and passpharase for Private Keyp=pypinksign.choose_cert(cn="홍길순", pw=b"i-am-h0ng")
sign=p.sign(b'1') verify=p.verify(sign, b'1') # Trueenvelop=p.pkcs7_signed_msg(b'message') # PKCS7 signed with K-PKI

Load PFX(p12) certificate.

importpypinksign# choose_cert function automatically fetch path for certificates# and load certificate which match DN and passpharase for Private Keyp=pypinksign.PinkSign(p12_path="홍길순.pfx", prikey_password=b"i-am-h0ng")
sign=p.sign(b'1') verify=p.verify(sign, b'1') # Trueenvelop=p.pkcs7_enveloped_msg(b'message') # Envelop with K-PKI - Temporary removed

Requirement & Dependency

  • Python 3.8 or above
  • PyASN1 for pyasn1
  • cryptography for cryptography.hazmat
  • OpenSSL 1.1.1 or above due to cryptography package

Installation

The easiest way to get PyPinkSign is pip

pip install pypinksign

The current development version can be found at http://github.com/bandoche/pypinksign/tarball/main

Changelog

v0.5.4 (2025-10-17)

  • Update dependency (cryptography>=46.0.3) to include latest security patches and compatibility updates.
  • Require OpenSSL 3.0.0 or newer.
  • Add Python 3.14 support.

v0.5.3 (2025-02-22)

  • Update dependency (cryptography==44.0.1) to resolves multiple vulnerabilities.
  • Update dependency (pyasn1==0.6.1) to support recent python versions.
  • Update cryptography deprecations. (move SEED algo, use not_valid_before/after_utc) (thanks to kerokim)
  • Drop Python 3.7 support.

v0.5.2 (2024-12-21)

  • Update dependency (cryptography==42.0.8) to resolves multiple vulnerabilities.

v0.5.1 (2022-11-02)

  • Update dependency (cryptography==38.0.3) which resolves CVE-2022-3602 and CVE-2022-3786.

v0.5.0 (2022-01-18)

  • Upgrade dependency. (cryptography==36.0.1)
  • Fix file handle leakage.

v0.4.5 (2020-12-03)

v0.4.4 (2020-12-03)

  • Fix CRT related param error.
  • Remove PyOpenSSL dependency.
  • Remove old OpenSSL version dependency with pure SEED implementation.
    • If SEED algorithm is not supported by local OpenSSL, use python version of SEED algorithm automatically.

v0.4.3 (2020-02-26)

  • Fix seed_generator to generate bytes.

v0.4.2 (2020-02-26)

  • Test code fix.

v0.4.1 (2020-02-26)

  • Add PKCS7 sign message.

v0.4 (2020-02-26)

  • Drop Python 2 support.
  • Support Python 3.6 or above.
  • Add type hinting.
  • Add test code.
  • Add PBKDF2 for support PBES2 private key. (by [yongminz])
  • Add function to inject r (rand num) value to private key.
  • Update pyasn1 to 0.4.8.
  • Update cryptography to 2.8.
  • Update pyOpenSSL to 19.1.0.
  • Temporary remove enveloping function.

v0.3 (2017-03-14)

  • Add support for PFX (PKCS 12).
  • Add PyOpenSSL module for PFX support.
  • Remove PBKDF1 module.

v0.2.3 (2016-09-19)

  • Update cryptography dependency version to 1.5.

v0.2.2 (2016-07-25)

  • You can load private key file from string.
  • Update Docstring format.

v0.2.1 (2016-06-23)

  • Bug fix.

v0.2 (2016-06-21)

  • Add function for get serial number of cert.
  • Remove README.rst in repository.

v0.1.1 (2015-06-07)

  • Add README.rst for PyPI.

v0.1 (2015-06-07)

  • First release.

Thanks to

See also

About

PinkSign – a friendly Python library for NPKI (공동인증서, 구 공인인증서) certificates 🔑

Topics

Resources

Stars

112 stars

Watchers

12 watching

Forks

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

PyPinkSign

Python code for PKI certificate. 공인인증서(공동인증서)를 다루는 파이썬 코드입니다.

Status

Buildcodecov

Support method

Usage example

Load public key file and private key file.

importpypinksignp=pypinksign.PinkSign()
p.load_pubkey(pubkey_path="/path/signCert.der")
p.load_prikey(prikey_path="/path/signPri.key", prikey_password=b"my-0wn-S3cret")
sign=p.sign(b'1') verify=p.verify(sign, b'1') # True

Load specific certificate. (by CN)

importpypinksign# choose_cert function automatically fetch path for certificates# and load certificate which match CN and passpharase for Private Keyp=pypinksign.choose_cert(cn="홍길순", pw=b"i-am-h0ng")
sign=p.sign(b'1') verify=p.verify(sign, b'1') # Trueenvelop=p.pkcs7_signed_msg(b'message') # PKCS7 signed with K-PKI

Load PFX(p12) certificate.

importpypinksign# choose_cert function automatically fetch path for certificates# and load certificate which match DN and passpharase for Private Keyp=pypinksign.PinkSign(p12_path="홍길순.pfx", prikey_password=b"i-am-h0ng")
sign=p.sign(b'1') verify=p.verify(sign, b'1') # Trueenvelop=p.pkcs7_enveloped_msg(b'message') # Envelop with K-PKI - Temporary removed

Requirement & Dependency

  • Python 3.8 or above
  • PyASN1 for pyasn1
  • cryptography for cryptography.hazmat
  • OpenSSL 1.1.1 or above due to cryptography package

Installation

The easiest way to get PyPinkSign is pip

pip install pypinksign

The current development version can be found at http://github.com/bandoche/pypinksign/tarball/main

Changelog

v0.5.4 (2025-10-17)

  • Update dependency (cryptography>=46.0.3) to include latest security patches and compatibility updates.
  • Require OpenSSL 3.0.0 or newer.
  • Add Python 3.14 support.

v0.5.3 (2025-02-22)

  • Update dependency (cryptography==44.0.1) to resolves multiple vulnerabilities.
  • Update dependency (pyasn1==0.6.1) to support recent python versions.
  • Update cryptography deprecations. (move SEED algo, use not_valid_before/after_utc) (thanks to kerokim)
  • Drop Python 3.7 support.

v0.5.2 (2024-12-21)

  • Update dependency (cryptography==42.0.8) to resolves multiple vulnerabilities.

v0.5.1 (2022-11-02)

  • Update dependency (cryptography==38.0.3) which resolves CVE-2022-3602 and CVE-2022-3786.

v0.5.0 (2022-01-18)

  • Upgrade dependency. (cryptography==36.0.1)
  • Fix file handle leakage.

v0.4.5 (2020-12-03)

v0.4.4 (2020-12-03)

  • Fix CRT related param error.
  • Remove PyOpenSSL dependency.
  • Remove old OpenSSL version dependency with pure SEED implementation.
    • If SEED algorithm is not supported by local OpenSSL, use python version of SEED algorithm automatically.

v0.4.3 (2020-02-26)

  • Fix seed_generator to generate bytes.

v0.4.2 (2020-02-26)

  • Test code fix.

v0.4.1 (2020-02-26)

  • Add PKCS7 sign message.

v0.4 (2020-02-26)

  • Drop Python 2 support.
  • Support Python 3.6 or above.
  • Add type hinting.
  • Add test code.
  • Add PBKDF2 for support PBES2 private key. (by [yongminz])
  • Add function to inject r (rand num) value to private key.
  • Update pyasn1 to 0.4.8.
  • Update cryptography to 2.8.
  • Update pyOpenSSL to 19.1.0.
  • Temporary remove enveloping function.

v0.3 (2017-03-14)

  • Add support for PFX (PKCS 12).
  • Add PyOpenSSL module for PFX support.
  • Remove PBKDF1 module.

v0.2.3 (2016-09-19)

  • Update cryptography dependency version to 1.5.

v0.2.2 (2016-07-25)

  • You can load private key file from string.
  • Update Docstring format.

v0.2.1 (2016-06-23)

  • Bug fix.

v0.2 (2016-06-21)

  • Add function for get serial number of cert.
  • Remove README.rst in repository.

v0.1.1 (2015-06-07)

  • Add README.rst for PyPI.

v0.1 (2015-06-07)

  • First release.

Thanks to

See also

About

PinkSign – a friendly Python library for NPKI (공동인증서, 구 공인인증서) certificates 🔑

Topics

Resources

Stars

112 stars

Watchers

12 watching

Forks

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

PyPinkSign

Python code for PKI certificate. 공인인증서(공동인증서)를 다루는 파이썬 코드입니다.

Status

Buildcodecov

Support method

Usage example

Load public key file and private key file.

importpypinksignp=pypinksign.PinkSign()
p.load_pubkey(pubkey_path="/path/signCert.der")
p.load_prikey(prikey_path="/path/signPri.key", prikey_password=b"my-0wn-S3cret")
sign=p.sign(b'1') verify=p.verify(sign, b'1') # True

Load specific certificate. (by CN)

importpypinksign# choose_cert function automatically fetch path for certificates# and load certificate which match CN and passpharase for Private Keyp=pypinksign.choose_cert(cn="홍길순", pw=b"i-am-h0ng")
sign=p.sign(b'1') verify=p.verify(sign, b'1') # Trueenvelop=p.pkcs7_signed_msg(b'message') # PKCS7 signed with K-PKI

Load PFX(p12) certificate.

importpypinksign# choose_cert function automatically fetch path for certificates# and load certificate which match DN and passpharase for Private Keyp=pypinksign.PinkSign(p12_path="홍길순.pfx", prikey_password=b"i-am-h0ng")
sign=p.sign(b'1') verify=p.verify(sign, b'1') # Trueenvelop=p.pkcs7_enveloped_msg(b'message') # Envelop with K-PKI - Temporary removed

Requirement & Dependency

  • Python 3.8 or above
  • PyASN1 for pyasn1
  • cryptography for cryptography.hazmat
  • OpenSSL 1.1.1 or above due to cryptography package

Installation

The easiest way to get PyPinkSign is pip

pip install pypinksign

The current development version can be found at http://github.com/bandoche/pypinksign/tarball/main

Changelog

v0.5.4 (2025-10-17)

  • Update dependency (cryptography>=46.0.3) to include latest security patches and compatibility updates.
  • Require OpenSSL 3.0.0 or newer.
  • Add Python 3.14 support.

v0.5.3 (2025-02-22)

  • Update dependency (cryptography==44.0.1) to resolves multiple vulnerabilities.
  • Update dependency (pyasn1==0.6.1) to support recent python versions.
  • Update cryptography deprecations. (move SEED algo, use not_valid_before/after_utc) (thanks to kerokim)
  • Drop Python 3.7 support.

v0.5.2 (2024-12-21)

  • Update dependency (cryptography==42.0.8) to resolves multiple vulnerabilities.

v0.5.1 (2022-11-02)

  • Update dependency (cryptography==38.0.3) which resolves CVE-2022-3602 and CVE-2022-3786.

v0.5.0 (2022-01-18)

  • Upgrade dependency. (cryptography==36.0.1)
  • Fix file handle leakage.

v0.4.5 (2020-12-03)

v0.4.4 (2020-12-03)

  • Fix CRT related param error.
  • Remove PyOpenSSL dependency.
  • Remove old OpenSSL version dependency with pure SEED implementation.
    • If SEED algorithm is not supported by local OpenSSL, use python version of SEED algorithm automatically.

v0.4.3 (2020-02-26)

  • Fix seed_generator to generate bytes.

v0.4.2 (2020-02-26)

  • Test code fix.

v0.4.1 (2020-02-26)

  • Add PKCS7 sign message.

v0.4 (2020-02-26)

  • Drop Python 2 support.
  • Support Python 3.6 or above.
  • Add type hinting.
  • Add test code.
  • Add PBKDF2 for support PBES2 private key. (by [yongminz])
  • Add function to inject r (rand num) value to private key.
  • Update pyasn1 to 0.4.8.
  • Update cryptography to 2.8.
  • Update pyOpenSSL to 19.1.0.
  • Temporary remove enveloping function.

v0.3 (2017-03-14)

  • Add support for PFX (PKCS 12).
  • Add PyOpenSSL module for PFX support.
  • Remove PBKDF1 module.

v0.2.3 (2016-09-19)

  • Update cryptography dependency version to 1.5.

v0.2.2 (2016-07-25)

  • You can load private key file from string.
  • Update Docstring format.

v0.2.1 (2016-06-23)

  • Bug fix.

v0.2 (2016-06-21)

  • Add function for get serial number of cert.
  • Remove README.rst in repository.

v0.1.1 (2015-06-07)

  • Add README.rst for PyPI.

v0.1 (2015-06-07)

  • First release.

Thanks to

See also

About

PinkSign – a friendly Python library for NPKI (공동인증서, 구 공인인증서) certificates 🔑

Topics

Resources

Stars

112 stars

Watchers

12 watching

Forks

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

PyPinkSign

Python code for PKI certificate. 공인인증서(공동인증서)를 다루는 파이썬 코드입니다.

Status

Buildcodecov

Support method

Usage example

Load public key file and private key file.

importpypinksignp=pypinksign.PinkSign()
p.load_pubkey(pubkey_path="/path/signCert.der")
p.load_prikey(prikey_path="/path/signPri.key", prikey_password=b"my-0wn-S3cret")
sign=p.sign(b'1') verify=p.verify(sign, b'1') # True

Load specific certificate. (by CN)

importpypinksign# choose_cert function automatically fetch path for certificates# and load certificate which match CN and passpharase for Private Keyp=pypinksign.choose_cert(cn="홍길순", pw=b"i-am-h0ng")
sign=p.sign(b'1') verify=p.verify(sign, b'1') # Trueenvelop=p.pkcs7_signed_msg(b'message') # PKCS7 signed with K-PKI

Load PFX(p12) certificate.

importpypinksign# choose_cert function automatically fetch path for certificates# and load certificate which match DN and passpharase for Private Keyp=pypinksign.PinkSign(p12_path="홍길순.pfx", prikey_password=b"i-am-h0ng")
sign=p.sign(b'1') verify=p.verify(sign, b'1') # Trueenvelop=p.pkcs7_enveloped_msg(b'message') # Envelop with K-PKI - Temporary removed

Requirement & Dependency

  • Python 3.8 or above
  • PyASN1 for pyasn1
  • cryptography for cryptography.hazmat
  • OpenSSL 1.1.1 or above due to cryptography package

Installation

The easiest way to get PyPinkSign is pip

pip install pypinksign

The current development version can be found at http://github.com/bandoche/pypinksign/tarball/main

Changelog

v0.5.4 (2025-10-17)

  • Update dependency (cryptography>=46.0.3) to include latest security patches and compatibility updates.
  • Require OpenSSL 3.0.0 or newer.
  • Add Python 3.14 support.

v0.5.3 (2025-02-22)

  • Update dependency (cryptography==44.0.1) to resolves multiple vulnerabilities.
  • Update dependency (pyasn1==0.6.1) to support recent python versions.
  • Update cryptography deprecations. (move SEED algo, use not_valid_before/after_utc) (thanks to kerokim)
  • Drop Python 3.7 support.

v0.5.2 (2024-12-21)

  • Update dependency (cryptography==42.0.8) to resolves multiple vulnerabilities.

v0.5.1 (2022-11-02)

  • Update dependency (cryptography==38.0.3) which resolves CVE-2022-3602 and CVE-2022-3786.

v0.5.0 (2022-01-18)

  • Upgrade dependency. (cryptography==36.0.1)
  • Fix file handle leakage.

v0.4.5 (2020-12-03)

v0.4.4 (2020-12-03)

  • Fix CRT related param error.
  • Remove PyOpenSSL dependency.
  • Remove old OpenSSL version dependency with pure SEED implementation.
    • If SEED algorithm is not supported by local OpenSSL, use python version of SEED algorithm automatically.

v0.4.3 (2020-02-26)

  • Fix seed_generator to generate bytes.

v0.4.2 (2020-02-26)

  • Test code fix.

v0.4.1 (2020-02-26)

  • Add PKCS7 sign message.

v0.4 (2020-02-26)

  • Drop Python 2 support.
  • Support Python 3.6 or above.
  • Add type hinting.
  • Add test code.
  • Add PBKDF2 for support PBES2 private key. (by [yongminz])
  • Add function to inject r (rand num) value to private key.
  • Update pyasn1 to 0.4.8.
  • Update cryptography to 2.8.
  • Update pyOpenSSL to 19.1.0.
  • Temporary remove enveloping function.

v0.3 (2017-03-14)

  • Add support for PFX (PKCS 12).
  • Add PyOpenSSL module for PFX support.
  • Remove PBKDF1 module.

v0.2.3 (2016-09-19)

  • Update cryptography dependency version to 1.5.

v0.2.2 (2016-07-25)

  • You can load private key file from string.
  • Update Docstring format.

v0.2.1 (2016-06-23)

  • Bug fix.

v0.2 (2016-06-21)

  • Add function for get serial number of cert.
  • Remove README.rst in repository.

v0.1.1 (2015-06-07)

  • Add README.rst for PyPI.

v0.1 (2015-06-07)

  • First release.

Thanks to

See also

About

PinkSign – a friendly Python library for NPKI (공동인증서, 구 공인인증서) certificates 🔑

Topics

Resources

Stars

112 stars

Watchers

12 watching

Forks

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

PyPinkSign

Python code for PKI certificate. 공인인증서(공동인증서)를 다루는 파이썬 코드입니다.

Status

Buildcodecov

Support method

Usage example

Load public key file and private key file.

importpypinksignp=pypinksign.PinkSign()
p.load_pubkey(pubkey_path="/path/signCert.der")
p.load_prikey(prikey_path="/path/signPri.key", prikey_password=b"my-0wn-S3cret")
sign=p.sign(b'1') verify=p.verify(sign, b'1') # True

Load specific certificate. (by CN)

importpypinksign# choose_cert function automatically fetch path for certificates# and load certificate which match CN and passpharase for Private Keyp=pypinksign.choose_cert(cn="홍길순", pw=b"i-am-h0ng")
sign=p.sign(b'1') verify=p.verify(sign, b'1') # Trueenvelop=p.pkcs7_signed_msg(b'message') # PKCS7 signed with K-PKI

Load PFX(p12) certificate.

importpypinksign# choose_cert function automatically fetch path for certificates# and load certificate which match DN and passpharase for Private Keyp=pypinksign.PinkSign(p12_path="홍길순.pfx", prikey_password=b"i-am-h0ng")
sign=p.sign(b'1') verify=p.verify(sign, b'1') # Trueenvelop=p.pkcs7_enveloped_msg(b'message') # Envelop with K-PKI - Temporary removed

Requirement & Dependency

  • Python 3.8 or above
  • PyASN1 for pyasn1
  • cryptography for cryptography.hazmat
  • OpenSSL 1.1.1 or above due to cryptography package

Installation

The easiest way to get PyPinkSign is pip

pip install pypinksign

The current development version can be found at http://github.com/bandoche/pypinksign/tarball/main

Changelog

v0.5.4 (2025-10-17)

  • Update dependency (cryptography>=46.0.3) to include latest security patches and compatibility updates.
  • Require OpenSSL 3.0.0 or newer.
  • Add Python 3.14 support.

v0.5.3 (2025-02-22)

  • Update dependency (cryptography==44.0.1) to resolves multiple vulnerabilities.
  • Update dependency (pyasn1==0.6.1) to support recent python versions.
  • Update cryptography deprecations. (move SEED algo, use not_valid_before/after_utc) (thanks to kerokim)
  • Drop Python 3.7 support.

v0.5.2 (2024-12-21)

  • Update dependency (cryptography==42.0.8) to resolves multiple vulnerabilities.

v0.5.1 (2022-11-02)

  • Update dependency (cryptography==38.0.3) which resolves CVE-2022-3602 and CVE-2022-3786.

v0.5.0 (2022-01-18)

  • Upgrade dependency. (cryptography==36.0.1)
  • Fix file handle leakage.

v0.4.5 (2020-12-03)

v0.4.4 (2020-12-03)

  • Fix CRT related param error.
  • Remove PyOpenSSL dependency.
  • Remove old OpenSSL version dependency with pure SEED implementation.
    • If SEED algorithm is not supported by local OpenSSL, use python version of SEED algorithm automatically.

v0.4.3 (2020-02-26)

  • Fix seed_generator to generate bytes.

v0.4.2 (2020-02-26)

  • Test code fix.

v0.4.1 (2020-02-26)

  • Add PKCS7 sign message.

v0.4 (2020-02-26)

  • Drop Python 2 support.
  • Support Python 3.6 or above.
  • Add type hinting.
  • Add test code.
  • Add PBKDF2 for support PBES2 private key. (by [yongminz])
  • Add function to inject r (rand num) value to private key.
  • Update pyasn1 to 0.4.8.
  • Update cryptography to 2.8.
  • Update pyOpenSSL to 19.1.0.
  • Temporary remove enveloping function.

v0.3 (2017-03-14)

  • Add support for PFX (PKCS 12).
  • Add PyOpenSSL module for PFX support.
  • Remove PBKDF1 module.

v0.2.3 (2016-09-19)

  • Update cryptography dependency version to 1.5.

v0.2.2 (2016-07-25)

  • You can load private key file from string.
  • Update Docstring format.

v0.2.1 (2016-06-23)

  • Bug fix.

v0.2 (2016-06-21)

  • Add function for get serial number of cert.
  • Remove README.rst in repository.

v0.1.1 (2015-06-07)

  • Add README.rst for PyPI.

v0.1 (2015-06-07)

  • First release.

Thanks to

See also

About

PinkSign – a friendly Python library for NPKI (공동인증서, 구 공인인증서) certificates 🔑

Topics

Resources

Stars

112 stars

Watchers

12 watching

Forks

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

PyPinkSign

Python code for PKI certificate. 공인인증서(공동인증서)를 다루는 파이썬 코드입니다.

Status

Buildcodecov

Support method

Usage example

Load public key file and private key file.

importpypinksignp=pypinksign.PinkSign()
p.load_pubkey(pubkey_path="/path/signCert.der")
p.load_prikey(prikey_path="/path/signPri.key", prikey_password=b"my-0wn-S3cret")
sign=p.sign(b'1') verify=p.verify(sign, b'1') # True

Load specific certificate. (by CN)

importpypinksign# choose_cert function automatically fetch path for certificates# and load certificate which match CN and passpharase for Private Keyp=pypinksign.choose_cert(cn="홍길순", pw=b"i-am-h0ng")
sign=p.sign(b'1') verify=p.verify(sign, b'1') # Trueenvelop=p.pkcs7_signed_msg(b'message') # PKCS7 signed with K-PKI

Load PFX(p12) certificate.

importpypinksign# choose_cert function automatically fetch path for certificates# and load certificate which match DN and passpharase for Private Keyp=pypinksign.PinkSign(p12_path="홍길순.pfx", prikey_password=b"i-am-h0ng")
sign=p.sign(b'1') verify=p.verify(sign, b'1') # Trueenvelop=p.pkcs7_enveloped_msg(b'message') # Envelop with K-PKI - Temporary removed

Requirement & Dependency

  • Python 3.8 or above
  • PyASN1 for pyasn1
  • cryptography for cryptography.hazmat
  • OpenSSL 1.1.1 or above due to cryptography package

Installation

The easiest way to get PyPinkSign is pip

pip install pypinksign

The current development version can be found at http://github.com/bandoche/pypinksign/tarball/main

Changelog

v0.5.4 (2025-10-17)

  • Update dependency (cryptography>=46.0.3) to include latest security patches and compatibility updates.
  • Require OpenSSL 3.0.0 or newer.
  • Add Python 3.14 support.

v0.5.3 (2025-02-22)

  • Update dependency (cryptography==44.0.1) to resolves multiple vulnerabilities.
  • Update dependency (pyasn1==0.6.1) to support recent python versions.
  • Update cryptography deprecations. (move SEED algo, use not_valid_before/after_utc) (thanks to kerokim)
  • Drop Python 3.7 support.

v0.5.2 (2024-12-21)

  • Update dependency (cryptography==42.0.8) to resolves multiple vulnerabilities.

v0.5.1 (2022-11-02)

  • Update dependency (cryptography==38.0.3) which resolves CVE-2022-3602 and CVE-2022-3786.

v0.5.0 (2022-01-18)

  • Upgrade dependency. (cryptography==36.0.1)
  • Fix file handle leakage.

v0.4.5 (2020-12-03)

v0.4.4 (2020-12-03)

  • Fix CRT related param error.
  • Remove PyOpenSSL dependency.
  • Remove old OpenSSL version dependency with pure SEED implementation.
    • If SEED algorithm is not supported by local OpenSSL, use python version of SEED algorithm automatically.

v0.4.3 (2020-02-26)

  • Fix seed_generator to generate bytes.

v0.4.2 (2020-02-26)

  • Test code fix.

v0.4.1 (2020-02-26)

  • Add PKCS7 sign message.

v0.4 (2020-02-26)

  • Drop Python 2 support.
  • Support Python 3.6 or above.
  • Add type hinting.
  • Add test code.
  • Add PBKDF2 for support PBES2 private key. (by [yongminz])
  • Add function to inject r (rand num) value to private key.
  • Update pyasn1 to 0.4.8.
  • Update cryptography to 2.8.
  • Update pyOpenSSL to 19.1.0.
  • Temporary remove enveloping function.

v0.3 (2017-03-14)

  • Add support for PFX (PKCS 12).
  • Add PyOpenSSL module for PFX support.
  • Remove PBKDF1 module.

v0.2.3 (2016-09-19)

  • Update cryptography dependency version to 1.5.

v0.2.2 (2016-07-25)

  • You can load private key file from string.
  • Update Docstring format.

v0.2.1 (2016-06-23)

  • Bug fix.

v0.2 (2016-06-21)

  • Add function for get serial number of cert.
  • Remove README.rst in repository.

v0.1.1 (2015-06-07)

  • Add README.rst for PyPI.

v0.1 (2015-06-07)

  • First release.

Thanks to

See also

About

PinkSign – a friendly Python library for NPKI (공동인증서, 구 공인인증서) certificates 🔑

Topics

Resources

Stars

112 stars

Watchers

12 watching

Forks

Releases

Used by

Contributors

Languages