[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M73FY7F5E035ZT05MBW8564F":3,"skill-same:01M73FY7F5E035ZT05MBW8564F":47},{"skillNo":4,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":18,"linkOnly":19,"markdownContent":20,"markdownBody":21,"frontMatter":22,"refName":23,"commitSha":24,"skillDirectory":25,"forksCount":26,"repositoryHtmlUrl":27,"repositoryHomepageUrl":28,"ownerHtmlUrl":29,"ownerBlogUrl":30,"ownerDescription":31,"updatedAt":32,"install":33,"resources":46},"01M73FY7F5E035ZT05MBW8564F","stanford-crypto-patterns",null,"Horonomos-laps\u002FYana-AI","Horonomos-laps","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F355299122?v=4","01M76B3QPXE88ET2SQPDPVATZT"," Horonomos-laps","01M72ZQRJPCYPSSWT4D00VJR2A",13,"Apache-2.0","https:\u002F\u002Fgithub.com\u002FHoronomos-laps\u002FYana-AI\u002Fblob\u002Fmain\u002Fcore\u002Fskills\u002Fstanford-crypto-patterns\u002FSKILL.md",[],[],"2026-11-11 15:11:14",false,"---\nname: stanford-crypto-patterns\ndescription: Side-channel-resistant cryptography patterns from Stanford SJCL. Constant-time operations, AES-CCM authenticated encryption, PBKDF2 key derivation, random number generation, and timing-attack-safe comparisons. Sources: bitwiseshiftleft\u002Fsjcl (Stanford JavaScript Crypto Library).\norigin: yana-ai — synthesized from bitwiseshiftleft\u002Fsjcl (BSD-2-Clause, Stanford University)\nlicense: Apache-2.0\nversion: 1.0.0\ncompatibility: yana-ai >= 1.3.49\n---\n\n# \u002Fstanford-crypto-patterns\n\n## When to Use\n\n- Environments where timing-attack resistance is critical (secret comparison)\n- AES-CCM authenticated encryption (alternative to GCM with simpler nonce handling)\n- SJCL PRNG for cryptographic random number generation\n- Academic\u002Fcompliance contexts requiring vetted, peer-reviewed crypto library\n\n## Do NOT use for\n\n- New Node.js code — prefer built-in `crypto` module (WebCrypto API) for standard cases\n- Performance-critical bulk encryption (pure JS SJCL is slower than native C bindings)\n\n---\n\n## Constant-time comparison (timing-attack safe)\n\n```javascript\nimport sjcl from 'sjcl'\n\n\u002F\u002F WRONG: regular string comparison leaks timing info\n\u002F\u002F if (secretA === secretB) ...  ← fails early on first mismatch\n\n\u002F\u002F RIGHT: constant-time comparison via XOR of bitArrays\nfunction constantTimeEqual(a: string, b: string): boolean {\n  if (a.length !== b.length) return false\n  const aWords = sjcl.codec.utf8String.toBits(a)\n  const bWords = sjcl.codec.utf8String.toBits(b)\n\n  let diff = 0\n  for (let i = 0; i \u003C aWords.length; i++) {\n    diff |= aWords[i] ^ bWords[i]\n  }\n  return diff === 0\n}\n```\n\n---\n\n## AES-CCM authenticated encryption\n\n```javascript\nimport sjcl from 'sjcl'\n\nfunction encryptSJCL(plaintext: string, passphrase: string): string {\n  \u002F\u002F sjcl.encrypt handles: PBKDF2 key derivation + AES-CCM + random IV + MAC\n  const encrypted = sjcl.encrypt(passphrase, plaintext, {\n    ks:  256,      \u002F\u002F AES key size: 128 | 192 | 256\n    ts:  128,      \u002F\u002F authentication tag size: 64 | 96 | 128 bits\n    iter: 100_000, \u002F\u002F PBKDF2 iterations\n    mode: 'ccm',   \u002F\u002F ccm | gcm | ocb2\n  })\n  return encrypted  \u002F\u002F JSON string with iv, salt, ct, adata, mac\n}\n\nfunction decryptSJCL(encrypted: string, passphrase: string): string {\n  try {\n    return sjcl.decrypt(passphrase, encrypted)\n  } catch (e) {\n    throw new Error('[sjcl] decryption failed — wrong passphrase or tampered data')\n  }\n}\n```\n\n---\n\n## Cryptographic random bytes\n\n```javascript\n\u002F\u002F SJCL PRNG (seeded from system entropy via window.crypto or a custom entropy function)\nfunction secureRandom(bytes: number): string {\n  const wordCount = Math.ceil(bytes \u002F 4)\n  const words     = sjcl.random.randomWords(wordCount, 10)  \u002F\u002F paranoia level 10\n  return sjcl.codec.hex.fromBits(words).slice(0, bytes * 2)\n}\n\n\u002F\u002F Session nonce\nconst nonce = secureRandom(16)   \u002F\u002F 32-char hex = 128-bit nonce\n```\n\n---\n\n## PBKDF2 key derivation\n\n```javascript\nfunction deriveKeySJCL(passphrase: string, saltHex: string, iterations = 100_000): string {\n  const salt  = sjcl.codec.hex.toBits(saltHex)\n  const key   = sjcl.misc.pbkdf2(passphrase, salt, iterations, 256)\n  return sjcl.codec.hex.fromBits(key)\n}\n```\n\n---\n\n## SHA-256 \u002F HMAC\n\n```javascript\nconst hash = sjcl.codec.hex.fromBits(sjcl.hash.sha256.hash('data'))\n\nconst key  = sjcl.codec.utf8String.toBits(process.env.HMAC_KEY!)\nconst mac  = sjcl.codec.hex.fromBits(new sjcl.misc.hmac(key).encrypt('message'))\n```\n\n---\n\n## Anti-Fake-Pass Checklist\n\n```\n❌ sjcl.random.randomWords without seeding → throws on missing entropy in Node.js (use node-crypto seed)\n❌ sjcl.encrypt paranoia \u003C 6 → low entropy tolerance warning; use 8-10 for production\n❌ Comparing MAC tags with === → timing attack; use constantTimeEqual above\n❌ AES-CCM nonce reused → catastrophic, breaks authentication (SJCL uses random IV by default)\n❌ sjcl in browser vs Node.js → window.crypto auto-seed in browser, must manually add entropy in Node\n❌ sjcl output is JSON object — stringify before storing, parse before decrypting\n```\n","# \u002Fstanford-crypto-patterns\n\n## When to Use\n\n- Environments where timing-attack resistance is critical (secret comparison)\n- AES-CCM authenticated encryption (alternative to GCM with simpler nonce handling)\n- SJCL PRNG for cryptographic random number generation\n- Academic\u002Fcompliance contexts requiring vetted, peer-reviewed crypto library\n\n## Do NOT use for\n\n- New Node.js code — prefer built-in `crypto` module (WebCrypto API) for standard cases\n- Performance-critical bulk encryption (pure JS SJCL is slower than native C bindings)\n\n---\n\n## Constant-time comparison (timing-attack safe)\n\n```javascript\nimport sjcl from 'sjcl'\n\n\u002F\u002F WRONG: regular string comparison leaks timing info\n\u002F\u002F if (secretA === secretB) ...  ← fails early on first mismatch\n\n\u002F\u002F RIGHT: constant-time comparison via XOR of bitArrays\nfunction constantTimeEqual(a: string, b: string): boolean {\n  if (a.length !== b.length) return false\n  const aWords = sjcl.codec.utf8String.toBits(a)\n  const bWords = sjcl.codec.utf8String.toBits(b)\n\n  let diff = 0\n  for (let i = 0; i \u003C aWords.length; i++) {\n    diff |= aWords[i] ^ bWords[i]\n  }\n  return diff === 0\n}\n```\n\n---\n\n## AES-CCM authenticated encryption\n\n```javascript\nimport sjcl from 'sjcl'\n\nfunction encryptSJCL(plaintext: string, passphrase: string): string {\n  \u002F\u002F sjcl.encrypt handles: PBKDF2 key derivation + AES-CCM + random IV + MAC\n  const encrypted = sjcl.encrypt(passphrase, plaintext, {\n    ks:  256,      \u002F\u002F AES key size: 128 | 192 | 256\n    ts:  128,      \u002F\u002F authentication tag size: 64 | 96 | 128 bits\n    iter: 100_000, \u002F\u002F PBKDF2 iterations\n    mode: 'ccm',   \u002F\u002F ccm | gcm | ocb2\n  })\n  return encrypted  \u002F\u002F JSON string with iv, salt, ct, adata, mac\n}\n\nfunction decryptSJCL(encrypted: string, passphrase: string): string {\n  try {\n    return sjcl.decrypt(passphrase, encrypted)\n  } catch (e) {\n    throw new Error('[sjcl] decryption failed — wrong passphrase or tampered data')\n  }\n}\n```\n\n---\n\n## Cryptographic random bytes\n\n```javascript\n\u002F\u002F SJCL PRNG (seeded from system entropy via window.crypto or a custom entropy function)\nfunction secureRandom(bytes: number): string {\n  const wordCount = Math.ceil(bytes \u002F 4)\n  const words     = sjcl.random.randomWords(wordCount, 10)  \u002F\u002F paranoia level 10\n  return sjcl.codec.hex.fromBits(words).slice(0, bytes * 2)\n}\n\n\u002F\u002F Session nonce\nconst nonce = secureRandom(16)   \u002F\u002F 32-char hex = 128-bit nonce\n```\n\n---\n\n## PBKDF2 key derivation\n\n```javascript\nfunction deriveKeySJCL(passphrase: string, saltHex: string, iterations = 100_000): string {\n  const salt  = sjcl.codec.hex.toBits(saltHex)\n  const key   = sjcl.misc.pbkdf2(passphrase, salt, iterations, 256)\n  return sjcl.codec.hex.fromBits(key)\n}\n```\n\n---\n\n## SHA-256 \u002F HMAC\n\n```javascript\nconst hash = sjcl.codec.hex.fromBits(sjcl.hash.sha256.hash('data'))\n\nconst key  = sjcl.codec.utf8String.toBits(process.env.HMAC_KEY!)\nconst mac  = sjcl.codec.hex.fromBits(new sjcl.misc.hmac(key).encrypt('message'))\n```\n\n---\n\n## Anti-Fake-Pass Checklist\n\n```\n❌ sjcl.random.randomWords without seeding → throws on missing entropy in Node.js (use node-crypto seed)\n❌ sjcl.encrypt paranoia \u003C 6 → low entropy tolerance warning; use 8-10 for production\n❌ Comparing MAC tags with === → timing attack; use constantTimeEqual above\n❌ AES-CCM nonce reused → catastrophic, breaks authentication (SJCL uses random IV by default)\n❌ sjcl in browser vs Node.js → window.crypto auto-seed in browser, must manually add entropy in Node\n❌ sjcl output is JSON object — stringify before storing, parse before decrypting\n```\n",{},"main","481dcd7dd2e288b9d627a2bd017db70e64e6c6fa","core\u002Fskills\u002Fstanford-crypto-patterns",1,"https:\u002F\u002Fgithub.com\u002FHoronomos-laps\u002FYana-AI","https:\u002F\u002Fyana.vutam.link\u002F","https:\u002F\u002Fgithub.com\u002FHoronomos-laps","https:\u002F\u002Fyana.vutam.link","An open-source governed runtime & execution environment for multi-agent AI systems.","2026-11-11 23:56:26",{"source":7,"skillName":5,"commands":34,"prompt":44,"zipAvailable":45},[35,38,41],{"tool":36,"command":37},"npx","npx skills add Horonomos-laps\u002FYana-AI --skill stanford-crypto-patterns",{"tool":39,"command":40},"bunx","bunx skills add Horonomos-laps\u002FYana-AI --skill stanford-crypto-patterns",{"tool":42,"command":43},"pnpm","pnpm dlx skills add Horonomos-laps\u002FYana-AI --skill stanford-crypto-patterns","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FHoronomos-laps\u002FYana-AI\u002Fblob\u002Fmain\u002Fcore\u002Fskills\u002Fstanford-crypto-patterns\u002FSKILL.md",true,[],[48,56,63,71,79,87],{"skillNo":49,"name":50,"nameZh":6,"description":51,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":52,"licenseFileUrl":6,"sourceHtmlUrl":53,"categories":54,"keywords":55,"publishedAt":18},"01M735GKET5YVYKAY62W2P5YXB","openai--sentry--sentry","Use when the user asks to inspect Sentry issues or events, summarize recent production errors, or pull basic Sentry health data via the Sentry API; perform read-only queries with the bundled script and require `SENTRY_AUTH_TOKEN`.","MIT","https:\u002F\u002Fgithub.com\u002FHoronomos-laps\u002FYana-AI\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fopenai--sentry--sentry\u002FSKILL.md",[],[],{"skillNo":57,"name":58,"nameZh":6,"description":59,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":60,"categories":61,"keywords":62,"publishedAt":18},"01M73DCAP83T17HY7SMGK7MGFE","ito-basket-compare","Compare Itô prediction-market baskets against a user's knowledge base, portfolio notes, financial context, watchlist, or research thesis. Use for read-only basket comparison and gap analysis without investment advice or live trading.","https:\u002F\u002Fgithub.com\u002FHoronomos-laps\u002FYana-AI\u002Fblob\u002Fmain\u002Fcore\u002Fskills\u002Fito-basket-compare\u002FSKILL.md",[],[],{"skillNo":64,"name":65,"nameZh":6,"description":66,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":67,"sourceHtmlUrl":68,"categories":69,"keywords":70,"publishedAt":18},"01M734CYEMZFDR3KH6SW0JP8TD","implementing-network-traffic-baselining","Build network traffic baselines from NetFlow\u002FIPFIX data using Python pandas for statistical analysis, z-score anomaly detection, and hourly\u002Fdaily traffic pattern profiling","https:\u002F\u002Fgithub.com\u002Fyanacuti1121\u002FYana-AI\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fimplementing-network-traffic-baselining\u002FLICENSE","https:\u002F\u002Fgithub.com\u002FHoronomos-laps\u002FYana-AI\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fimplementing-network-traffic-baselining\u002FSKILL.md",[],[],{"skillNo":72,"name":73,"nameZh":6,"description":74,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":75,"sourceHtmlUrl":76,"categories":77,"keywords":78,"publishedAt":18},"01M73ASZ6NJRJM44Z2P84NGQ3Q","detecting-evasion-techniques-in-endpoint-logs","Detects defense evasion techniques used by adversaries in endpoint logs including log tampering, timestomping, process injection, and security tool disabling. Use when investigating suspicious endpoint behavior, building detection rules for evasion tactics, or conducting threat hunting for stealthy adversary activity. Activates for requests involving evasion detection, defense evasion analysis, log tampering detection, or MITRE ATT&CK TA0005.","https:\u002F\u002Fgithub.com\u002Fyanacuti1121\u002FYana-AI\u002Fblob\u002Fmain\u002Fcore\u002Fskills\u002Fdetecting-evasion-techniques-in-endpoint-logs\u002FLICENSE","https:\u002F\u002Fgithub.com\u002FHoronomos-laps\u002FYana-AI\u002Fblob\u002Fmain\u002Fcore\u002Fskills\u002Fdetecting-evasion-techniques-in-endpoint-logs\u002FSKILL.md",[],[],{"skillNo":80,"name":81,"nameZh":6,"description":82,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":83,"sourceHtmlUrl":84,"categories":85,"keywords":86,"publishedAt":18},"01M734AFNXD06Z78QRK0VKGT7Q","implementing-microsegmentation-with-guardicore","Implementing microsegmentation using Akamai Guardicore Segmentation to map application dependencies, create granular network policies, visualize east-west traffic flows, and enforce least-privilege communication between workloads across data centers and cloud.","https:\u002F\u002Fgithub.com\u002Fyanacuti1121\u002FYana-AI\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fimplementing-microsegmentation-with-guardicore\u002FLICENSE","https:\u002F\u002Fgithub.com\u002FHoronomos-laps\u002FYana-AI\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fimplementing-microsegmentation-with-guardicore\u002FSKILL.md",[],[],{"skillNo":88,"name":89,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":90,"categories":91,"keywords":92,"publishedAt":18},"01M736TK27QMCXK0DVCH25SJN5","ramdisk-tmpfs-patterns","https:\u002F\u002Fgithub.com\u002FHoronomos-laps\u002FYana-AI\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Framdisk-tmpfs-patterns\u002FSKILL.md",[],[]]