diff --git a/package-lock.json b/package-lock.json
index 06bc5841..14e003e6 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -9,62 +9,62 @@
"version": "1.4.14",
"license": "AGPL-3.0-only",
"dependencies": {
- "@tanstack/react-virtual": "^3.13.18",
- "@tiptap/extension-color": "^3.20.4",
- "@tiptap/extension-image": "^3.20.4",
- "@tiptap/extension-link": "^3.20.4",
- "@tiptap/extension-placeholder": "^3.20.4",
- "@tiptap/extension-text-align": "^3.20.4",
- "@tiptap/extension-text-style": "^3.20.4",
- "@tiptap/extension-underline": "^3.20.4",
- "@tiptap/pm": "^3.20.4",
- "@tiptap/react": "^3.20.4",
- "@tiptap/starter-kit": "^3.20.4",
- "asn1js": "^3.0.7",
+ "@tanstack/react-virtual": "^3.13.24",
+ "@tiptap/extension-color": "^3.22.4",
+ "@tiptap/extension-image": "^3.22.4",
+ "@tiptap/extension-link": "^3.22.4",
+ "@tiptap/extension-placeholder": "^3.22.4",
+ "@tiptap/extension-text-align": "^3.22.4",
+ "@tiptap/extension-text-style": "^3.22.4",
+ "@tiptap/extension-underline": "^3.22.4",
+ "@tiptap/pm": "^3.22.4",
+ "@tiptap/react": "^3.22.4",
+ "@tiptap/starter-kit": "^3.22.4",
+ "asn1js": "^3.0.10",
"clsx": "^2.1.1",
"date-fns": "^4.1.0",
- "dompurify": "^3.3.3",
+ "dompurify": "^3.4.1",
"jszip": "^3.10.1",
- "lucide-react": "^0.575.0",
- "next": "^16.1.5",
- "next-intl": "^4.5.8",
+ "lucide-react": "^1.8.0",
+ "next": "^16.2.4",
+ "next-intl": "^4.9.1",
"otpauth": "^9.5.0",
- "pkijs": "^3.3.3",
+ "pkijs": "^3.4.0",
"postal-mime": "^2.7.4",
"pvtsutils": "^1.3.6",
"qrcode": "^1.5.4",
- "react": "^19.2.1",
- "react-dom": "^19.2.1",
+ "react": "^19.2.5",
+ "react-dom": "^19.2.5",
"sonner": "^2.0.7",
"tailwind-merge": "^3.4.0",
"webcrypto-liner": "^1.4.3",
- "zustand": "^5.0.9"
+ "zustand": "^5.0.12"
},
"devDependencies": {
- "@eslint/js": "^9.39.3",
- "@playwright/test": "^1.58.2",
- "@tailwindcss/postcss": "^4",
+ "@eslint/js": "^9.39.4",
+ "@playwright/test": "^1.59.1",
+ "@tailwindcss/postcss": "^4.2.4",
"@testing-library/dom": "^10.4.1",
"@testing-library/jest-dom": "^6.9.1",
"@testing-library/react": "^16.3.1",
- "@types/node": "^25.2.3",
+ "@types/node": "^25.6.0",
"@types/qrcode": "^1.5.6",
"@types/react": "^19.2.7",
"@types/react-dom": "^19.2.3",
- "@typescript-eslint/eslint-plugin": "^8.49.0",
- "@typescript-eslint/parser": "^8.49.0",
- "@vitejs/plugin-react": "^5.1.2",
- "@vitest/ui": "^4.0.16",
- "eslint": "^9.39.2",
+ "@typescript-eslint/eslint-plugin": "^8.59.0",
+ "@typescript-eslint/parser": "^8.59.0",
+ "@vitejs/plugin-react": "^6.0.1",
+ "@vitest/ui": "^4.1.5",
+ "eslint": "^9.39.4",
"eslint-plugin-react": "^7.37.5",
- "eslint-plugin-react-hooks": "^7.0.1",
+ "eslint-plugin-react-hooks": "^7.1.1",
"fake-indexeddb": "^6.2.5",
- "globals": "^17.0.0",
+ "globals": "^17.5.0",
"husky": "^9.1.7",
"jsdom": "^28.1.0",
- "tailwindcss": "^4.1.17",
+ "tailwindcss": "^4.2.4",
"typescript": "^5.9.3",
- "vitest": "^4.0.16"
+ "vitest": "^4.1.5"
}
},
"node_modules/@acemir/cssom": {
@@ -301,16 +301,6 @@
"@babel/core": "^7.0.0"
}
},
- "node_modules/@babel/helper-plugin-utils": {
- "version": "7.28.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz",
- "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6.9.0"
- }
- },
"node_modules/@babel/helper-string-parser": {
"version": "7.27.1",
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
@@ -371,38 +361,6 @@
"node": ">=6.0.0"
}
},
- "node_modules/@babel/plugin-transform-react-jsx-self": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz",
- "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-react-jsx-source": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz",
- "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
"node_modules/@babel/runtime": {
"version": "7.28.6",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.6.tgz",
@@ -606,10 +564,33 @@
"node": ">=20.19.0"
}
},
+ "node_modules/@emnapi/core": {
+ "version": "1.9.2",
+ "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.9.2.tgz",
+ "integrity": "sha512-UC+ZhH3XtczQYfOlu3lNEkdW/p4dsJ1r/bP7H8+rhao3TTTMO1ATq/4DdIi23XuGoFY+Cz0JmCbdVl0hz9jZcA==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "@emnapi/wasi-threads": "1.2.1",
+ "tslib": "^2.4.0"
+ }
+ },
"node_modules/@emnapi/runtime": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.8.1.tgz",
- "integrity": "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==",
+ "version": "1.9.2",
+ "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.9.2.tgz",
+ "integrity": "sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw==",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@emnapi/wasi-threads": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz",
+ "integrity": "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==",
+ "dev": true,
"license": "MIT",
"optional": true,
"dependencies": {
@@ -629,6 +610,7 @@
"os": [
"aix"
],
+ "peer": true,
"engines": {
"node": ">=18"
}
@@ -646,6 +628,7 @@
"os": [
"android"
],
+ "peer": true,
"engines": {
"node": ">=18"
}
@@ -663,6 +646,7 @@
"os": [
"android"
],
+ "peer": true,
"engines": {
"node": ">=18"
}
@@ -680,6 +664,7 @@
"os": [
"android"
],
+ "peer": true,
"engines": {
"node": ">=18"
}
@@ -697,6 +682,7 @@
"os": [
"darwin"
],
+ "peer": true,
"engines": {
"node": ">=18"
}
@@ -714,6 +700,7 @@
"os": [
"darwin"
],
+ "peer": true,
"engines": {
"node": ">=18"
}
@@ -731,6 +718,7 @@
"os": [
"freebsd"
],
+ "peer": true,
"engines": {
"node": ">=18"
}
@@ -748,6 +736,7 @@
"os": [
"freebsd"
],
+ "peer": true,
"engines": {
"node": ">=18"
}
@@ -765,6 +754,7 @@
"os": [
"linux"
],
+ "peer": true,
"engines": {
"node": ">=18"
}
@@ -782,6 +772,7 @@
"os": [
"linux"
],
+ "peer": true,
"engines": {
"node": ">=18"
}
@@ -799,6 +790,7 @@
"os": [
"linux"
],
+ "peer": true,
"engines": {
"node": ">=18"
}
@@ -816,6 +808,7 @@
"os": [
"linux"
],
+ "peer": true,
"engines": {
"node": ">=18"
}
@@ -833,6 +826,7 @@
"os": [
"linux"
],
+ "peer": true,
"engines": {
"node": ">=18"
}
@@ -850,6 +844,7 @@
"os": [
"linux"
],
+ "peer": true,
"engines": {
"node": ">=18"
}
@@ -867,6 +862,7 @@
"os": [
"linux"
],
+ "peer": true,
"engines": {
"node": ">=18"
}
@@ -884,6 +880,7 @@
"os": [
"linux"
],
+ "peer": true,
"engines": {
"node": ">=18"
}
@@ -901,6 +898,7 @@
"os": [
"linux"
],
+ "peer": true,
"engines": {
"node": ">=18"
}
@@ -918,6 +916,7 @@
"os": [
"netbsd"
],
+ "peer": true,
"engines": {
"node": ">=18"
}
@@ -935,6 +934,7 @@
"os": [
"netbsd"
],
+ "peer": true,
"engines": {
"node": ">=18"
}
@@ -952,6 +952,7 @@
"os": [
"openbsd"
],
+ "peer": true,
"engines": {
"node": ">=18"
}
@@ -969,6 +970,7 @@
"os": [
"openbsd"
],
+ "peer": true,
"engines": {
"node": ">=18"
}
@@ -986,6 +988,7 @@
"os": [
"openharmony"
],
+ "peer": true,
"engines": {
"node": ">=18"
}
@@ -1003,6 +1006,7 @@
"os": [
"sunos"
],
+ "peer": true,
"engines": {
"node": ">=18"
}
@@ -1020,6 +1024,7 @@
"os": [
"win32"
],
+ "peer": true,
"engines": {
"node": ">=18"
}
@@ -1037,6 +1042,7 @@
"os": [
"win32"
],
+ "peer": true,
"engines": {
"node": ">=18"
}
@@ -1054,6 +1060,7 @@
"os": [
"win32"
],
+ "peer": true,
"engines": {
"node": ">=18"
}
@@ -1088,24 +1095,24 @@
}
},
"node_modules/@eslint/config-array": {
- "version": "0.21.1",
- "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz",
- "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==",
+ "version": "0.21.2",
+ "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.2.tgz",
+ "integrity": "sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
"@eslint/object-schema": "^2.1.7",
"debug": "^4.3.1",
- "minimatch": "^3.1.2"
+ "minimatch": "^3.1.5"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
}
},
"node_modules/@eslint/config-array/node_modules/brace-expansion": {
- "version": "1.1.12",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
- "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
+ "version": "1.1.14",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz",
+ "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1153,20 +1160,20 @@
}
},
"node_modules/@eslint/eslintrc": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.3.tgz",
- "integrity": "sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==",
+ "version": "3.3.5",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.5.tgz",
+ "integrity": "sha512-4IlJx0X0qftVsN5E+/vGujTRIFtwuLbNsVUe7TO6zYPDR1O6nFwvwhIKEKSrl6dZchmYBITazxKoUYOjdtjlRg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "ajv": "^6.12.4",
+ "ajv": "^6.14.0",
"debug": "^4.3.2",
"espree": "^10.0.1",
"globals": "^14.0.0",
"ignore": "^5.2.0",
"import-fresh": "^3.2.1",
"js-yaml": "^4.1.1",
- "minimatch": "^3.1.2",
+ "minimatch": "^3.1.5",
"strip-json-comments": "^3.1.1"
},
"engines": {
@@ -1177,9 +1184,9 @@
}
},
"node_modules/@eslint/eslintrc/node_modules/brace-expansion": {
- "version": "1.1.12",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
- "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
+ "version": "1.1.14",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz",
+ "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1224,9 +1231,9 @@
}
},
"node_modules/@eslint/js": {
- "version": "9.39.3",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.3.tgz",
- "integrity": "sha512-1B1VkCq6FuUNlQvlBYb+1jDu/gV297TIs/OeiaSR9l1H27SVW55ONE1e1Vp16NqP683+xEGzxYtv4XCiDPaQiw==",
+ "version": "9.39.4",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.4.tgz",
+ "integrity": "sha512-nE7DEIchvtiFTwBw4Lfbu59PG+kCofhjsKaCWzxTpt4lfRjRMqG6uMBzKXuEcyXhOHoUp9riAm7/aWYGhXZ9cw==",
"dev": true,
"license": "MIT",
"engines": {
@@ -1306,56 +1313,34 @@
"license": "MIT",
"optional": true
},
- "node_modules/@formatjs/ecma402-abstract": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-3.1.1.tgz",
- "integrity": "sha512-jhZbTwda+2tcNrs4kKvxrPLPjx8QsBCLCUgrrJ/S+G9YrGHWLhAyFMMBHJBnBoOwuLHd7L14FgYudviKaxkO2Q==",
- "license": "MIT",
- "dependencies": {
- "@formatjs/fast-memoize": "3.1.0",
- "@formatjs/intl-localematcher": "0.8.1",
- "decimal.js": "^10.6.0",
- "tslib": "^2.8.1"
- }
- },
"node_modules/@formatjs/fast-memoize": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-3.1.0.tgz",
- "integrity": "sha512-b5mvSWCI+XVKiz5WhnBCY3RJ4ZwfjAidU0yVlKa3d3MSgKmH1hC3tBGEAtYyN5mqL7N0G5x0BOUYyO8CEupWgg==",
- "license": "MIT",
- "dependencies": {
- "tslib": "^2.8.1"
- }
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-3.1.2.tgz",
+ "integrity": "sha512-vPnriihkfK0lzoQGaXq+qXH23VsYyansRTkTgo2aTG0k1NjLFyZimFVdfj4C9JkSE5dm7CEngcQ5TTc1yAyBfQ==",
+ "license": "MIT"
},
"node_modules/@formatjs/icu-messageformat-parser": {
- "version": "3.5.1",
- "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-3.5.1.tgz",
- "integrity": "sha512-sSDmSvmmoVQ92XqWb499KrIhv/vLisJU8ITFrx7T7NZHUmMY7EL9xgRowAosaljhqnj/5iufG24QrdzB6X3ItA==",
+ "version": "3.5.4",
+ "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-3.5.4.tgz",
+ "integrity": "sha512-JVY39ROgLt+pIYngo6piyj4OVfZmXs/2FkC4wLS+ql1Eig/sGJKB7YwDO/5bkJFkfwaFAeIpgEiJc8hiYxNalw==",
"license": "MIT",
"dependencies": {
- "@formatjs/ecma402-abstract": "3.1.1",
- "@formatjs/icu-skeleton-parser": "2.1.1",
- "tslib": "^2.8.1"
+ "@formatjs/icu-skeleton-parser": "2.1.4"
}
},
"node_modules/@formatjs/icu-skeleton-parser": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-2.1.1.tgz",
- "integrity": "sha512-PSFABlcNefjI6yyk8f7nyX1DC7NHmq6WaCHZLySEXBrXuLOB2f935YsnzuPjlz+ibhb9yWTdPeVX1OVcj24w2Q==",
- "license": "MIT",
- "dependencies": {
- "@formatjs/ecma402-abstract": "3.1.1",
- "tslib": "^2.8.1"
- }
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-2.1.4.tgz",
+ "integrity": "sha512-8bSFZbrlvGX11ywMZxtgkPBt5Q8/etyts7j7j+GWpOVK1g43zwMIH3LZxk43HAtEP7L/jtZ+OZaMiFTOiBj9CA==",
+ "license": "MIT"
},
"node_modules/@formatjs/intl-localematcher": {
- "version": "0.8.1",
- "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.8.1.tgz",
- "integrity": "sha512-xwEuwQFdtSq1UKtQnyTZWC+eHdv7Uygoa+H2k/9uzBVQjDyp9r20LNDNKedWXll7FssT3GRHvqsdJGYSUWqYFA==",
+ "version": "0.8.3",
+ "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.8.3.tgz",
+ "integrity": "sha512-pHUjWb9NuhnMs8+PxQdzBtZRFJHlGhrURGAbm6Ltwl82BFajeuiIR3jblSa7ia3r62rXe/0YtVpUG3xWr5bFCA==",
"license": "MIT",
"dependencies": {
- "@formatjs/fast-memoize": "3.1.0",
- "tslib": "^2.8.1"
+ "@formatjs/fast-memoize": "3.1.2"
}
},
"node_modules/@humanfs/core": {
@@ -1926,16 +1911,35 @@
"@jridgewell/sourcemap-codec": "^1.4.14"
}
},
+ "node_modules/@napi-rs/wasm-runtime": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.4.tgz",
+ "integrity": "sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "@tybys/wasm-util": "^0.10.1"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/Brooooooklyn"
+ },
+ "peerDependencies": {
+ "@emnapi/core": "^1.7.1",
+ "@emnapi/runtime": "^1.7.1"
+ }
+ },
"node_modules/@next/env": {
- "version": "16.1.6",
- "resolved": "https://registry.npmjs.org/@next/env/-/env-16.1.6.tgz",
- "integrity": "sha512-N1ySLuZjnAtN3kFnwhAwPvZah8RJxKasD7x1f8shFqhncnWZn4JMfg37diLNuoHsLAlrDfM3g4mawVdtAG8XLQ==",
+ "version": "16.2.4",
+ "resolved": "https://registry.npmjs.org/@next/env/-/env-16.2.4.tgz",
+ "integrity": "sha512-dKkkOzOSwFYe5RX6y26fZgkSpVAlIOJKQHIiydQcrWH6y/97+RceSOAdjZ14Qa3zLduVUy0TXcn+EiM6t4rPgw==",
"license": "MIT"
},
"node_modules/@next/swc-darwin-arm64": {
- "version": "16.1.6",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-16.1.6.tgz",
- "integrity": "sha512-wTzYulosJr/6nFnqGW7FrG3jfUUlEf8UjGA0/pyypJl42ExdVgC6xJgcXQ+V8QFn6niSG2Pb8+MIG1mZr2vczw==",
+ "version": "16.2.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-16.2.4.tgz",
+ "integrity": "sha512-OXTFFox5EKN1Ym08vfrz+OXxmCcEjT4SFMbNRsWZE99dMqt2Kcusl5MqPXcW232RYkMLQTy0hqgAMEsfEd/l2A==",
"cpu": [
"arm64"
],
@@ -1949,9 +1953,9 @@
}
},
"node_modules/@next/swc-darwin-x64": {
- "version": "16.1.6",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-16.1.6.tgz",
- "integrity": "sha512-BLFPYPDO+MNJsiDWbeVzqvYd4NyuRrEYVB5k2N3JfWncuHAy2IVwMAOlVQDFjj+krkWzhY2apvmekMkfQR0CUQ==",
+ "version": "16.2.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-16.2.4.tgz",
+ "integrity": "sha512-XhpVnUfmYWvD3YrXu55XdcAkQtOnvaI6wtQa8fuF5fGoKoxIUZ0kWPtcOfqJEWngFF/lOS9l3+O9CcownhiQxQ==",
"cpu": [
"x64"
],
@@ -1965,9 +1969,9 @@
}
},
"node_modules/@next/swc-linux-arm64-gnu": {
- "version": "16.1.6",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-16.1.6.tgz",
- "integrity": "sha512-OJYkCd5pj/QloBvoEcJ2XiMnlJkRv9idWA/j0ugSuA34gMT6f5b7vOiCQHVRpvStoZUknhl6/UxOXL4OwtdaBw==",
+ "version": "16.2.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-16.2.4.tgz",
+ "integrity": "sha512-Mx/tjlNA3G8kg14QvuGAJ4xBwPk1tUHq56JxZ8CXnZwz1Etz714soCEzGQQzVMz4bEnGPowzkV6Xrp6wAkEWOQ==",
"cpu": [
"arm64"
],
@@ -1981,9 +1985,9 @@
}
},
"node_modules/@next/swc-linux-arm64-musl": {
- "version": "16.1.6",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-16.1.6.tgz",
- "integrity": "sha512-S4J2v+8tT3NIO9u2q+S0G5KdvNDjXfAv06OhfOzNDaBn5rw84DGXWndOEB7d5/x852A20sW1M56vhC/tRVbccQ==",
+ "version": "16.2.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-16.2.4.tgz",
+ "integrity": "sha512-iVMMp14514u7Nup2umQS03nT/bN9HurK8ufylC3FZNykrwjtx7V1A7+4kvhbDSCeonTVqV3Txnv0Lu+m2oDXNg==",
"cpu": [
"arm64"
],
@@ -1997,9 +2001,9 @@
}
},
"node_modules/@next/swc-linux-x64-gnu": {
- "version": "16.1.6",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-16.1.6.tgz",
- "integrity": "sha512-2eEBDkFlMMNQnkTyPBhQOAyn2qMxyG2eE7GPH2WIDGEpEILcBPI/jdSv4t6xupSP+ot/jkfrCShLAa7+ZUPcJQ==",
+ "version": "16.2.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-16.2.4.tgz",
+ "integrity": "sha512-EZOvm1aQWgnI/N/xcWOlnS3RQBk0VtVav5Zo7n4p0A7UKyTDx047k8opDbXgBpHl4CulRqRfbw3QrX2w5UOXMQ==",
"cpu": [
"x64"
],
@@ -2013,9 +2017,9 @@
}
},
"node_modules/@next/swc-linux-x64-musl": {
- "version": "16.1.6",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-16.1.6.tgz",
- "integrity": "sha512-oicJwRlyOoZXVlxmIMaTq7f8pN9QNbdes0q2FXfRsPhfCi8n8JmOZJm5oo1pwDaFbnnD421rVU409M3evFbIqg==",
+ "version": "16.2.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-16.2.4.tgz",
+ "integrity": "sha512-h9FxsngCm9cTBf71AR4fGznDEDx1hS7+kSEiIRjq5kO1oXWm07DxVGZjCvk0SGx7TSjlUqhI8oOyz7NfwAdPoA==",
"cpu": [
"x64"
],
@@ -2029,9 +2033,9 @@
}
},
"node_modules/@next/swc-win32-arm64-msvc": {
- "version": "16.1.6",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-16.1.6.tgz",
- "integrity": "sha512-gQmm8izDTPgs+DCWH22kcDmuUp7NyiJgEl18bcr8irXA5N2m2O+JQIr6f3ct42GOs9c0h8QF3L5SzIxcYAAXXw==",
+ "version": "16.2.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-16.2.4.tgz",
+ "integrity": "sha512-3NdJV5OXMSOeJYijX+bjaLge3mJBlh4ybydbT4GFoB/2hAojWHtMhl3CYlYoMrjPuodp0nzFVi4Tj2+WaMg+Ow==",
"cpu": [
"arm64"
],
@@ -2045,9 +2049,9 @@
}
},
"node_modules/@next/swc-win32-x64-msvc": {
- "version": "16.1.6",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-16.1.6.tgz",
- "integrity": "sha512-NRfO39AIrzBnixKbjuo2YiYhB6o9d8v/ymU9m/Xk8cyVk+k7XylniXkHwjs4s70wedVffc6bQNbufk5v0xEm0A==",
+ "version": "16.2.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-16.2.4.tgz",
+ "integrity": "sha512-kMVGgsqhO5YTYODD9IPGGhA6iprWidQckK3LmPeW08PIFENRmgfb4MjXHO+p//d+ts2rpjvK5gXWzXSMrPl9cw==",
"cpu": [
"x64"
],
@@ -2072,6 +2076,16 @@
"url": "https://paulmillr.com/funding/"
}
},
+ "node_modules/@oxc-project/types": {
+ "version": "0.126.0",
+ "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.126.0.tgz",
+ "integrity": "sha512-oGfVtjAgwQVVpfBrbtk4e1XDyWHRFta6BS3GWVzrF8xYBT2VGQAk39yJS/wFSMrZqoiCU4oghT3Ch0HaHGIHcQ==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/Boshen"
+ }
+ },
"node_modules/@parcel/watcher": {
"version": "2.5.6",
"resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.6.tgz",
@@ -2391,13 +2405,13 @@
}
},
"node_modules/@playwright/test": {
- "version": "1.58.2",
- "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.58.2.tgz",
- "integrity": "sha512-akea+6bHYBBfA9uQqSYmlJXn61cTa+jbO87xVLCWbTqbWadRVmhxlXATaOjOgcBaWU4ePo0wB41KMFv3o35IXA==",
+ "version": "1.59.1",
+ "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.59.1.tgz",
+ "integrity": "sha512-PG6q63nQg5c9rIi4/Z5lR5IVF7yU5MqmKaPOe0HSc0O2cX1fPi96sUQu5j7eo4gKCkB2AnNGoWt7y4/Xx3Kcqg==",
"devOptional": true,
"license": "Apache-2.0",
"dependencies": {
- "playwright": "1.58.2"
+ "playwright": "1.59.1"
},
"bin": {
"playwright": "cli.js"
@@ -2413,37 +2427,10 @@
"dev": true,
"license": "MIT"
},
- "node_modules/@remirror/core-constants": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@remirror/core-constants/-/core-constants-3.0.0.tgz",
- "integrity": "sha512-42aWfPrimMfDKDi4YegyS7x+/0tlzaqwPQCULLanv3DMIlu96KTJR0fM5isWX2UViOqlGnX6YFgqWepcX+XMNg==",
- "license": "MIT"
- },
- "node_modules/@rolldown/pluginutils": {
- "version": "1.0.0-rc.3",
- "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.3.tgz",
- "integrity": "sha512-eybk3TjzzzV97Dlj5c+XrBFW57eTNhzod66y9HrBlzJ6NsCrWCp/2kaPS3K9wJmurBC0Tdw4yPjXKZqlznim3Q==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@rollup/rollup-android-arm-eabi": {
- "version": "4.59.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.59.0.tgz",
- "integrity": "sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ]
- },
- "node_modules/@rollup/rollup-android-arm64": {
- "version": "4.59.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.59.0.tgz",
- "integrity": "sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==",
+ "node_modules/@rolldown/binding-android-arm64": {
+ "version": "1.0.0-rc.16",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-rc.16.tgz",
+ "integrity": "sha512-rhY3k7Bsae9qQfOtph2Pm2jZEA+s8Gmjoz4hhmx70K9iMQ/ddeae+xhRQcM5IuVx5ry1+bGfkvMn7D6MJggVSA==",
"cpu": [
"arm64"
],
@@ -2452,12 +2439,15 @@
"optional": true,
"os": [
"android"
- ]
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
},
- "node_modules/@rollup/rollup-darwin-arm64": {
- "version": "4.59.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.59.0.tgz",
- "integrity": "sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==",
+ "node_modules/@rolldown/binding-darwin-arm64": {
+ "version": "1.0.0-rc.16",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-rc.16.tgz",
+ "integrity": "sha512-rNz0yK078yrNn3DrdgN+PKiMOW8HfQ92jQiXxwX8yW899ayV00MLVdaCNeVBhG/TbH3ouYVObo8/yrkiectkcQ==",
"cpu": [
"arm64"
],
@@ -2466,12 +2456,15 @@
"optional": true,
"os": [
"darwin"
- ]
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
},
- "node_modules/@rollup/rollup-darwin-x64": {
- "version": "4.59.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.59.0.tgz",
- "integrity": "sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==",
+ "node_modules/@rolldown/binding-darwin-x64": {
+ "version": "1.0.0-rc.16",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-rc.16.tgz",
+ "integrity": "sha512-r/OmdR00HmD4i79Z//xO06uEPOq5hRXdhw7nzkxQxwSavs3PSHa1ijntdpOiZ2mzOQ3fVVu8C1M19FoNM+dMUQ==",
"cpu": [
"x64"
],
@@ -2480,26 +2473,15 @@
"optional": true,
"os": [
"darwin"
- ]
- },
- "node_modules/@rollup/rollup-freebsd-arm64": {
- "version": "4.59.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.59.0.tgz",
- "integrity": "sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==",
- "cpu": [
- "arm64"
],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ]
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
},
- "node_modules/@rollup/rollup-freebsd-x64": {
- "version": "4.59.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.59.0.tgz",
- "integrity": "sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==",
+ "node_modules/@rolldown/binding-freebsd-x64": {
+ "version": "1.0.0-rc.16",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-rc.16.tgz",
+ "integrity": "sha512-KcRE5w8h0OnjUatG8pldyD14/CQ5Phs1oxfR+3pKDjboHRo9+MkqQaiIZlZRpsxC15paeXme/I127tUa9TXJ6g==",
"cpu": [
"x64"
],
@@ -2508,12 +2490,15 @@
"optional": true,
"os": [
"freebsd"
- ]
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
},
- "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
- "version": "4.59.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.59.0.tgz",
- "integrity": "sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==",
+ "node_modules/@rolldown/binding-linux-arm-gnueabihf": {
+ "version": "1.0.0-rc.16",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-rc.16.tgz",
+ "integrity": "sha512-bT0guA1bpxEJ/ZhTRniQf7rNF8ybvXOuWbNIeLABaV5NGjx4EtOWBTSRGWFU9ZWVkPOZ+HNFP8RMcBokBiZ0Kg==",
"cpu": [
"arm"
],
@@ -2522,26 +2507,15 @@
"optional": true,
"os": [
"linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-arm-musleabihf": {
- "version": "4.59.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.59.0.tgz",
- "integrity": "sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==",
- "cpu": [
- "arm"
],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
},
- "node_modules/@rollup/rollup-linux-arm64-gnu": {
- "version": "4.59.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.59.0.tgz",
- "integrity": "sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==",
+ "node_modules/@rolldown/binding-linux-arm64-gnu": {
+ "version": "1.0.0-rc.16",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-rc.16.tgz",
+ "integrity": "sha512-+tHktCHWV8BDQSjemUqm/Jl/TPk3QObCTIjmdDy/nlupcujZghmKK2962LYrqFpWu+ai01AN/REOH3NEpqvYQg==",
"cpu": [
"arm64"
],
@@ -2550,12 +2524,15 @@
"optional": true,
"os": [
"linux"
- ]
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
},
- "node_modules/@rollup/rollup-linux-arm64-musl": {
- "version": "4.59.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.59.0.tgz",
- "integrity": "sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==",
+ "node_modules/@rolldown/binding-linux-arm64-musl": {
+ "version": "1.0.0-rc.16",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-rc.16.tgz",
+ "integrity": "sha512-3fPzdREH806oRLxpTWW1Gt4tQHs0TitZFOECB2xzCFLPKnSOy90gwA7P29cksYilFO6XVRY1kzga0cL2nRjKPg==",
"cpu": [
"arm64"
],
@@ -2564,40 +2541,15 @@
"optional": true,
"os": [
"linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-loong64-gnu": {
- "version": "4.59.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.59.0.tgz",
- "integrity": "sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==",
- "cpu": [
- "loong64"
],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
},
- "node_modules/@rollup/rollup-linux-loong64-musl": {
- "version": "4.59.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.59.0.tgz",
- "integrity": "sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==",
- "cpu": [
- "loong64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-ppc64-gnu": {
- "version": "4.59.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.59.0.tgz",
- "integrity": "sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==",
+ "node_modules/@rolldown/binding-linux-ppc64-gnu": {
+ "version": "1.0.0-rc.16",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.0-rc.16.tgz",
+ "integrity": "sha512-EKwI1tSrLs7YVw+JPJT/G2dJQ1jl9qlTTTEG0V2Ok/RdOenRfBw2PQdLPyjhIu58ocdBfP7vIRN/pvMsPxs/AQ==",
"cpu": [
"ppc64"
],
@@ -2606,54 +2558,15 @@
"optional": true,
"os": [
"linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-ppc64-musl": {
- "version": "4.59.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.59.0.tgz",
- "integrity": "sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==",
- "cpu": [
- "ppc64"
],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
},
- "node_modules/@rollup/rollup-linux-riscv64-gnu": {
- "version": "4.59.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.59.0.tgz",
- "integrity": "sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-riscv64-musl": {
- "version": "4.59.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.59.0.tgz",
- "integrity": "sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-s390x-gnu": {
- "version": "4.59.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.59.0.tgz",
- "integrity": "sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==",
+ "node_modules/@rolldown/binding-linux-s390x-gnu": {
+ "version": "1.0.0-rc.16",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.0-rc.16.tgz",
+ "integrity": "sha512-Uknladnb3Sxqu6SEcqBldQyJUpk8NleooZEc0MbRBJ4inEhRYWZX0NJu12vNf2mqAq7gsofAxHrGghiUYjhaLQ==",
"cpu": [
"s390x"
],
@@ -2662,12 +2575,15 @@
"optional": true,
"os": [
"linux"
- ]
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
},
- "node_modules/@rollup/rollup-linux-x64-gnu": {
- "version": "4.59.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.59.0.tgz",
- "integrity": "sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==",
+ "node_modules/@rolldown/binding-linux-x64-gnu": {
+ "version": "1.0.0-rc.16",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-rc.16.tgz",
+ "integrity": "sha512-FIb8+uG49sZBtLTn+zt1AJ20TqVcqWeSIyoVt0or7uAWesgKaHbiBh6OpA/k9v0LTt+PTrb1Lao133kP4uVxkg==",
"cpu": [
"x64"
],
@@ -2676,12 +2592,15 @@
"optional": true,
"os": [
"linux"
- ]
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
},
- "node_modules/@rollup/rollup-linux-x64-musl": {
- "version": "4.59.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.59.0.tgz",
- "integrity": "sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==",
+ "node_modules/@rolldown/binding-linux-x64-musl": {
+ "version": "1.0.0-rc.16",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-rc.16.tgz",
+ "integrity": "sha512-RuERhF9/EgWxZEXYWCOaViUWHIboceK4/ivdtQ3R0T44NjLkIIlGIAVAuCddFxsZ7vnRHtNQUrt2vR2n2slB2w==",
"cpu": [
"x64"
],
@@ -2690,26 +2609,15 @@
"optional": true,
"os": [
"linux"
- ]
- },
- "node_modules/@rollup/rollup-openbsd-x64": {
- "version": "4.59.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.59.0.tgz",
- "integrity": "sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==",
- "cpu": [
- "x64"
],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "openbsd"
- ]
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
},
- "node_modules/@rollup/rollup-openharmony-arm64": {
- "version": "4.59.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.59.0.tgz",
- "integrity": "sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==",
+ "node_modules/@rolldown/binding-openharmony-arm64": {
+ "version": "1.0.0-rc.16",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-rc.16.tgz",
+ "integrity": "sha512-mXcXnvd9GpazCxeUCCnZ2+YF7nut+ZOEbE4GtaiPtyY6AkhZWbK70y1KK3j+RDhjVq5+U8FySkKRb/+w0EeUwA==",
"cpu": [
"arm64"
],
@@ -2718,12 +2626,34 @@
"optional": true,
"os": [
"openharmony"
- ]
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
},
- "node_modules/@rollup/rollup-win32-arm64-msvc": {
- "version": "4.59.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.59.0.tgz",
- "integrity": "sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==",
+ "node_modules/@rolldown/binding-wasm32-wasi": {
+ "version": "1.0.0-rc.16",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-rc.16.tgz",
+ "integrity": "sha512-3Q2KQxnC8IJOLqXmUMoYwyIPZU9hzRbnHaoV3Euz+VVnjZKcY8ktnNP8T9R4/GGQtb27C/UYKABxesKWb8lsvQ==",
+ "cpu": [
+ "wasm32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "@emnapi/core": "1.9.2",
+ "@emnapi/runtime": "1.9.2",
+ "@napi-rs/wasm-runtime": "^1.1.4"
+ },
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-win32-arm64-msvc": {
+ "version": "1.0.0-rc.16",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-rc.16.tgz",
+ "integrity": "sha512-tj7XRemQcOcFwv7qhpUxMTBbI5mWMlE4c1Omhg5+h8GuLXzyj8HviYgR+bB2DMDgRqUE+jiDleqSCRjx4aYk/Q==",
"cpu": [
"arm64"
],
@@ -2732,26 +2662,15 @@
"optional": true,
"os": [
"win32"
- ]
- },
- "node_modules/@rollup/rollup-win32-ia32-msvc": {
- "version": "4.59.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.59.0.tgz",
- "integrity": "sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==",
- "cpu": [
- "ia32"
],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ]
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
},
- "node_modules/@rollup/rollup-win32-x64-gnu": {
- "version": "4.59.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.59.0.tgz",
- "integrity": "sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==",
+ "node_modules/@rolldown/binding-win32-x64-msvc": {
+ "version": "1.0.0-rc.16",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-rc.16.tgz",
+ "integrity": "sha512-PH5DRZT+F4f2PTXRXR8uJxnBq2po/xFtddyabTJVJs/ZYVHqXPEgNIr35IHTEa6bpa0Q8Awg+ymkTaGnKITw4g==",
"cpu": [
"x64"
],
@@ -2760,21 +2679,17 @@
"optional": true,
"os": [
"win32"
- ]
- },
- "node_modules/@rollup/rollup-win32-x64-msvc": {
- "version": "4.59.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.59.0.tgz",
- "integrity": "sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==",
- "cpu": [
- "x64"
],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/pluginutils": {
+ "version": "1.0.0-rc.7",
+ "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.7.tgz",
+ "integrity": "sha512-qujRfC8sFVInYSPPMLQByRh7zhwkGFS4+tyMQ83srV1qrxL4g8E2tyxVVyxd0+8QeBM1mIk9KbWxkegRr76XzA==",
"dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ]
+ "license": "MIT"
},
"node_modules/@schummar/icu-type-parser": {
"version": "1.21.5",
@@ -3012,49 +2927,49 @@
}
},
"node_modules/@tailwindcss/node": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.2.1.tgz",
- "integrity": "sha512-jlx6sLk4EOwO6hHe1oCGm1Q4AN/s0rSrTTPBGPM0/RQ6Uylwq17FuU8IeJJKEjtc6K6O07zsvP+gDO6MMWo7pg==",
+ "version": "4.2.4",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.2.4.tgz",
+ "integrity": "sha512-Ai7+yQPxz3ddrDQzFfBKdHEVBg0w3Zl83jnjuwxnZOsnH9pGn93QHQtpU0p/8rYWxvbFZHneni6p1BSLK4DkGA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@jridgewell/remapping": "^2.3.5",
"enhanced-resolve": "^5.19.0",
"jiti": "^2.6.1",
- "lightningcss": "1.31.1",
+ "lightningcss": "1.32.0",
"magic-string": "^0.30.21",
"source-map-js": "^1.2.1",
- "tailwindcss": "4.2.1"
+ "tailwindcss": "4.2.4"
}
},
"node_modules/@tailwindcss/oxide": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.2.1.tgz",
- "integrity": "sha512-yv9jeEFWnjKCI6/T3Oq50yQEOqmpmpfzG1hcZsAOaXFQPfzWprWrlHSdGPEF3WQTi8zu8ohC9Mh9J470nT5pUw==",
+ "version": "4.2.4",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.2.4.tgz",
+ "integrity": "sha512-9El/iI069DKDSXwTvB9J4BwdO5JhRrOweGaK25taBAvBXyXqJAX+Jqdvs8r8gKpsI/1m0LeJLyQYTf/WLrBT1Q==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 20"
},
"optionalDependencies": {
- "@tailwindcss/oxide-android-arm64": "4.2.1",
- "@tailwindcss/oxide-darwin-arm64": "4.2.1",
- "@tailwindcss/oxide-darwin-x64": "4.2.1",
- "@tailwindcss/oxide-freebsd-x64": "4.2.1",
- "@tailwindcss/oxide-linux-arm-gnueabihf": "4.2.1",
- "@tailwindcss/oxide-linux-arm64-gnu": "4.2.1",
- "@tailwindcss/oxide-linux-arm64-musl": "4.2.1",
- "@tailwindcss/oxide-linux-x64-gnu": "4.2.1",
- "@tailwindcss/oxide-linux-x64-musl": "4.2.1",
- "@tailwindcss/oxide-wasm32-wasi": "4.2.1",
- "@tailwindcss/oxide-win32-arm64-msvc": "4.2.1",
- "@tailwindcss/oxide-win32-x64-msvc": "4.2.1"
+ "@tailwindcss/oxide-android-arm64": "4.2.4",
+ "@tailwindcss/oxide-darwin-arm64": "4.2.4",
+ "@tailwindcss/oxide-darwin-x64": "4.2.4",
+ "@tailwindcss/oxide-freebsd-x64": "4.2.4",
+ "@tailwindcss/oxide-linux-arm-gnueabihf": "4.2.4",
+ "@tailwindcss/oxide-linux-arm64-gnu": "4.2.4",
+ "@tailwindcss/oxide-linux-arm64-musl": "4.2.4",
+ "@tailwindcss/oxide-linux-x64-gnu": "4.2.4",
+ "@tailwindcss/oxide-linux-x64-musl": "4.2.4",
+ "@tailwindcss/oxide-wasm32-wasi": "4.2.4",
+ "@tailwindcss/oxide-win32-arm64-msvc": "4.2.4",
+ "@tailwindcss/oxide-win32-x64-msvc": "4.2.4"
}
},
"node_modules/@tailwindcss/oxide-android-arm64": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.2.1.tgz",
- "integrity": "sha512-eZ7G1Zm5EC8OOKaesIKuw77jw++QJ2lL9N+dDpdQiAB/c/B2wDh0QPFHbkBVrXnwNugvrbJFk1gK2SsVjwWReg==",
+ "version": "4.2.4",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.2.4.tgz",
+ "integrity": "sha512-e7MOr1SAn9U8KlZzPi1ZXGZHeC5anY36qjNwmZv9pOJ8E4Q6jmD1vyEHkQFmNOIN7twGPEMXRHmitN4zCMN03g==",
"cpu": [
"arm64"
],
@@ -3069,9 +2984,9 @@
}
},
"node_modules/@tailwindcss/oxide-darwin-arm64": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.2.1.tgz",
- "integrity": "sha512-q/LHkOstoJ7pI1J0q6djesLzRvQSIfEto148ppAd+BVQK0JYjQIFSK3JgYZJa+Yzi0DDa52ZsQx2rqytBnf8Hw==",
+ "version": "4.2.4",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.2.4.tgz",
+ "integrity": "sha512-tSC/Kbqpz/5/o/C2sG7QvOxAKqyd10bq+ypZNf+9Fi2TvbVbv1zNpcEptcsU7DPROaSbVgUXmrzKhurFvo5eDg==",
"cpu": [
"arm64"
],
@@ -3086,9 +3001,9 @@
}
},
"node_modules/@tailwindcss/oxide-darwin-x64": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.2.1.tgz",
- "integrity": "sha512-/f/ozlaXGY6QLbpvd/kFTro2l18f7dHKpB+ieXz+Cijl4Mt9AI2rTrpq7V+t04nK+j9XBQHnSMdeQRhbGyt6fw==",
+ "version": "4.2.4",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.2.4.tgz",
+ "integrity": "sha512-yPyUXn3yO/ufR6+Kzv0t4fCg2qNr90jxXc5QqBpjlPNd0NqyDXcmQb/6weunH/MEDXW5dhyEi+agTDiqa3WsGg==",
"cpu": [
"x64"
],
@@ -3103,9 +3018,9 @@
}
},
"node_modules/@tailwindcss/oxide-freebsd-x64": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.2.1.tgz",
- "integrity": "sha512-5e/AkgYJT/cpbkys/OU2Ei2jdETCLlifwm7ogMC7/hksI2fC3iiq6OcXwjibcIjPung0kRtR3TxEITkqgn0TcA==",
+ "version": "4.2.4",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.2.4.tgz",
+ "integrity": "sha512-BoMIB4vMQtZsXdGLVc2z+P9DbETkiopogfWZKbWwM8b/1Vinbs4YcUwo+kM/KeLkX3Ygrf4/PsRndKaYhS8Eiw==",
"cpu": [
"x64"
],
@@ -3120,9 +3035,9 @@
}
},
"node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.2.1.tgz",
- "integrity": "sha512-Uny1EcVTTmerCKt/1ZuKTkb0x8ZaiuYucg2/kImO5A5Y/kBz41/+j0gxUZl+hTF3xkWpDmHX+TaWhOtba2Fyuw==",
+ "version": "4.2.4",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.2.4.tgz",
+ "integrity": "sha512-7pIHBLTHYRAlS7V22JNuTh33yLH4VElwKtB3bwchK/UaKUPpQ0lPQiOWcbm4V3WP2I6fNIJ23vABIvoy2izdwA==",
"cpu": [
"arm"
],
@@ -3137,9 +3052,9 @@
}
},
"node_modules/@tailwindcss/oxide-linux-arm64-gnu": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.2.1.tgz",
- "integrity": "sha512-CTrwomI+c7n6aSSQlsPL0roRiNMDQ/YzMD9EjcR+H4f0I1SQ8QqIuPnsVp7QgMkC1Qi8rtkekLkOFjo7OlEFRQ==",
+ "version": "4.2.4",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.2.4.tgz",
+ "integrity": "sha512-+E4wxJ0ZGOzSH325reXTWB48l42i93kQqMvDyz5gqfRzRZ7faNhnmvlV4EPGJU3QJM/3Ab5jhJ5pCRUsKn6OQw==",
"cpu": [
"arm64"
],
@@ -3154,9 +3069,9 @@
}
},
"node_modules/@tailwindcss/oxide-linux-arm64-musl": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.2.1.tgz",
- "integrity": "sha512-WZA0CHRL/SP1TRbA5mp9htsppSEkWuQ4KsSUumYQnyl8ZdT39ntwqmz4IUHGN6p4XdSlYfJwM4rRzZLShHsGAQ==",
+ "version": "4.2.4",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.2.4.tgz",
+ "integrity": "sha512-bBADEGAbo4ASnppIziaQJelekCxdMaxisrk+fB7Thit72IBnALp9K6ffA2G4ruj90G9XRS2VQ6q2bCKbfFV82g==",
"cpu": [
"arm64"
],
@@ -3171,9 +3086,9 @@
}
},
"node_modules/@tailwindcss/oxide-linux-x64-gnu": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.2.1.tgz",
- "integrity": "sha512-qMFzxI2YlBOLW5PhblzuSWlWfwLHaneBE0xHzLrBgNtqN6mWfs+qYbhryGSXQjFYB1Dzf5w+LN5qbUTPhW7Y5g==",
+ "version": "4.2.4",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.2.4.tgz",
+ "integrity": "sha512-7Mx25E4WTfnht0TVRTyC00j3i0M+EeFe7wguMDTlX4mRxafznw0CA8WJkFjWYH5BlgELd1kSjuU2JiPnNZbJDA==",
"cpu": [
"x64"
],
@@ -3188,9 +3103,9 @@
}
},
"node_modules/@tailwindcss/oxide-linux-x64-musl": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.2.1.tgz",
- "integrity": "sha512-5r1X2FKnCMUPlXTWRYpHdPYUY6a1Ar/t7P24OuiEdEOmms5lyqjDRvVY1yy9Rmioh+AunQ0rWiOTPE8F9A3v5g==",
+ "version": "4.2.4",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.2.4.tgz",
+ "integrity": "sha512-2wwJRF7nyhOR0hhHoChc04xngV3iS+akccHTGtz965FwF0up4b2lOdo6kI1EbDaEXKgvcrFBYcYQQ/rrnWFVfA==",
"cpu": [
"x64"
],
@@ -3205,9 +3120,9 @@
}
},
"node_modules/@tailwindcss/oxide-wasm32-wasi": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.2.1.tgz",
- "integrity": "sha512-MGFB5cVPvshR85MTJkEvqDUnuNoysrsRxd6vnk1Lf2tbiqNlXpHYZqkqOQalydienEWOHHFyyuTSYRsLfxFJ2Q==",
+ "version": "4.2.4",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.2.4.tgz",
+ "integrity": "sha512-FQsqApeor8Fo6gUEklzmaa9994orJZZDBAlQpK2Mq+DslRKFJeD6AjHpBQ0kZFQohVr8o85PPh8eOy86VlSCmw==",
"bundleDependencies": [
"@napi-rs/wasm-runtime",
"@emnapi/core",
@@ -3234,74 +3149,10 @@
"node": ">=14.0.0"
}
},
- "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/core": {
- "version": "1.8.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "@emnapi/wasi-threads": "1.1.0",
- "tslib": "^2.4.0"
- }
- },
- "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/runtime": {
- "version": "1.8.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "tslib": "^2.4.0"
- }
- },
- "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/wasi-threads": {
- "version": "1.1.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "tslib": "^2.4.0"
- }
- },
- "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@napi-rs/wasm-runtime": {
- "version": "1.1.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "@emnapi/core": "^1.7.1",
- "@emnapi/runtime": "^1.7.1",
- "@tybys/wasm-util": "^0.10.1"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/Brooooooklyn"
- }
- },
- "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@tybys/wasm-util": {
- "version": "0.10.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "tslib": "^2.4.0"
- }
- },
- "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/tslib": {
- "version": "2.8.1",
- "dev": true,
- "inBundle": true,
- "license": "0BSD",
- "optional": true
- },
"node_modules/@tailwindcss/oxide-win32-arm64-msvc": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.2.1.tgz",
- "integrity": "sha512-YlUEHRHBGnCMh4Nj4GnqQyBtsshUPdiNroZj8VPkvTZSoHsilRCwXcVKnG9kyi0ZFAS/3u+qKHBdDc81SADTRA==",
+ "version": "4.2.4",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.2.4.tgz",
+ "integrity": "sha512-L9BXqxC4ToVgwMFqj3pmZRqyHEztulpUJzCxUtLjobMCzTPsGt1Fa9enKbOpY2iIyVtaHNeNvAK8ERP/64sqGQ==",
"cpu": [
"arm64"
],
@@ -3316,9 +3167,9 @@
}
},
"node_modules/@tailwindcss/oxide-win32-x64-msvc": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.2.1.tgz",
- "integrity": "sha512-rbO34G5sMWWyrN/idLeVxAZgAKWrn5LiR3/I90Q9MkA67s6T1oB0xtTe+0heoBvHSpbU9Mk7i6uwJnpo4u21XQ==",
+ "version": "4.2.4",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.2.4.tgz",
+ "integrity": "sha512-ESlKG0EpVJQwRjXDDa9rLvhEAh0mhP1sF7sap9dNZT0yyl9SAG6T7gdP09EH0vIv0UNTlo6jPWyujD6559fZvw==",
"cpu": [
"x64"
],
@@ -3333,26 +3184,26 @@
}
},
"node_modules/@tailwindcss/postcss": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/@tailwindcss/postcss/-/postcss-4.2.1.tgz",
- "integrity": "sha512-OEwGIBnXnj7zJeonOh6ZG9woofIjGrd2BORfvE5p9USYKDCZoQmfqLcfNiRWoJlRWLdNPn2IgVZuWAOM4iTYMw==",
+ "version": "4.2.4",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/postcss/-/postcss-4.2.4.tgz",
+ "integrity": "sha512-wgAVj6nUWAolAu8YFvzT2cTBIElWHkjZwFYovF+xsqKsW2ADxM/X2opxj5NsF/qVccAOjRNe8X2IdPzMsWyHTg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@alloc/quick-lru": "^5.2.0",
- "@tailwindcss/node": "4.2.1",
- "@tailwindcss/oxide": "4.2.1",
+ "@tailwindcss/node": "4.2.4",
+ "@tailwindcss/oxide": "4.2.4",
"postcss": "^8.5.6",
- "tailwindcss": "4.2.1"
+ "tailwindcss": "4.2.4"
}
},
"node_modules/@tanstack/react-virtual": {
- "version": "3.13.19",
- "resolved": "https://registry.npmjs.org/@tanstack/react-virtual/-/react-virtual-3.13.19.tgz",
- "integrity": "sha512-KzwmU1IbE0IvCZSm6OXkS+kRdrgW2c2P3Ho3NC+zZXWK6oObv/L+lcV/2VuJ+snVESRlMJ+w/fg4WXI/JzoNGQ==",
+ "version": "3.13.24",
+ "resolved": "https://registry.npmjs.org/@tanstack/react-virtual/-/react-virtual-3.13.24.tgz",
+ "integrity": "sha512-aIJvz5OSkhNIhZIpYivrxrPTKYsjW9Uzy+sP/mx0S3sev2HyvPb7xmjbYvokzEpfgYHy/HjzJ2zFAETuUfgCpg==",
"license": "MIT",
"dependencies": {
- "@tanstack/virtual-core": "3.13.19"
+ "@tanstack/virtual-core": "3.14.0"
},
"funding": {
"type": "github",
@@ -3364,9 +3215,9 @@
}
},
"node_modules/@tanstack/virtual-core": {
- "version": "3.13.19",
- "resolved": "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.13.19.tgz",
- "integrity": "sha512-/BMP7kNhzKOd7wnDeB8NrIRNLwkf5AhCYCvtfZV2GXWbBieFm/el0n6LOAXlTi6ZwHICSNnQcIxRCWHrLzDY+g==",
+ "version": "3.14.0",
+ "resolved": "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.14.0.tgz",
+ "integrity": "sha512-JLANqGy/D6k4Ujmh8Tr25lGimuOXNiaVyXaCAZS0W+1390sADdGnyUdSWNIfd49gebtIxGMij4IktRVzrdr12Q==",
"license": "MIT",
"funding": {
"type": "github",
@@ -3449,48 +3300,48 @@
}
},
"node_modules/@tiptap/core": {
- "version": "3.20.4",
- "resolved": "https://registry.npmjs.org/@tiptap/core/-/core-3.20.4.tgz",
- "integrity": "sha512-3i/DG89TFY/b34T5P+j35UcjYuB5d3+9K8u6qID+iUqNPiza015HPIZLuPfE5elNwVdV3EXIoPo0LLeBLgXXAg==",
+ "version": "3.22.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/core/-/core-3.22.4.tgz",
+ "integrity": "sha512-vGIGm/HpqLg8EAAQXQ+koV+/S828OEpzocfWcPOwo1u2QUVf9dQG47Yy6JJ8zFFaJwfv4dBcOXli+7BrJwsxDQ==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/pm": "^3.20.4"
+ "@tiptap/pm": "3.22.4"
}
},
"node_modules/@tiptap/extension-blockquote": {
- "version": "3.20.4",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-blockquote/-/extension-blockquote-3.20.4.tgz",
- "integrity": "sha512-9sskyyhYj2oKat//lyZVXCp9YrPt4oJAZnGHYWXS0xlskjsLElrfKKlM4vpbhGss3VrhQRoEGqWLnIaJYPF1zw==",
+ "version": "3.22.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-blockquote/-/extension-blockquote-3.22.4.tgz",
+ "integrity": "sha512-7/61kNPbGFhMgM//zMknD0pSb69rGdRIkpulXOWS1JBrFHkH6hjZDfrOETNzgKkO+NlmzVl9rXSTv0xauS3lzA==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/core": "^3.20.4"
+ "@tiptap/core": "3.22.4"
}
},
"node_modules/@tiptap/extension-bold": {
- "version": "3.20.4",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-bold/-/extension-bold-3.20.4.tgz",
- "integrity": "sha512-Md7/mNAeJCY+VLJc8JRGI+8XkVPKiOGB1NgqQPdh3aYtxXQDChQOZoJEQl6TuudDxZ85bLZB67NjZlx3jo8/0g==",
+ "version": "3.22.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-bold/-/extension-bold-3.22.4.tgz",
+ "integrity": "sha512-jIaPKfNOQu2lhpbLDvtwlQqM+mjF+Kk+auHpzYjBnsuwUli1Cl5ZOau7RH+rru/SQvZe1DtpQlANujDywugZAA==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/core": "^3.20.4"
+ "@tiptap/core": "3.22.4"
}
},
"node_modules/@tiptap/extension-bubble-menu": {
- "version": "3.20.4",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-bubble-menu/-/extension-bubble-menu-3.20.4.tgz",
- "integrity": "sha512-EXywPlI8wjPcAb8ozymgVhjtMjFrnhtoyNTy8ZcObdpUi5CdO9j892Y7aPbKe5hLhlDpvJk7rMfir4FFKEmfng==",
+ "version": "3.22.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-bubble-menu/-/extension-bubble-menu-3.22.4.tgz",
+ "integrity": "sha512-v4pux5Ql3THAEjaLMY4ldtdy/Xy2qU7PJLBkq8ugLp8qicaKC+tpqxp6sGif4vLIjz7Ap5hurRbTNbXzszyyHA==",
"license": "MIT",
"optional": true,
"dependencies": {
@@ -3501,93 +3352,93 @@
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/core": "^3.20.4",
- "@tiptap/pm": "^3.20.4"
+ "@tiptap/core": "3.22.4",
+ "@tiptap/pm": "3.22.4"
}
},
"node_modules/@tiptap/extension-bullet-list": {
- "version": "3.20.4",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-bullet-list/-/extension-bullet-list-3.20.4.tgz",
- "integrity": "sha512-1RTGrur1EKoxfnLZ3M6xeNj8GITAz74jH2DHGcjLsd2Xr7Q7BozGaIq6GkkvKguMwbI1zCOxTHFCpUETXAIQQA==",
+ "version": "3.22.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-bullet-list/-/extension-bullet-list-3.22.4.tgz",
+ "integrity": "sha512-TB+d3fGcTixYjO7coKqTr1mGTJuqr8hjDCPUFgzuvKyJnBhqWITmBzQ/8CLq4rr6mihgGURbD3N+xkQuPAKFiw==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/extension-list": "^3.20.4"
+ "@tiptap/extension-list": "3.22.4"
}
},
"node_modules/@tiptap/extension-code": {
- "version": "3.20.4",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-code/-/extension-code-3.20.4.tgz",
- "integrity": "sha512-7j8Hi964bH1SZ9oLdZC1fkqWz27mliSDV7M8lmL/M14+Qw42D/VOAKS4Aw9OCFtHMlTsjLR6qsoVxL8Lpkt6NA==",
+ "version": "3.22.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-code/-/extension-code-3.22.4.tgz",
+ "integrity": "sha512-cnbxmVhAcc7X3G81QUYEmKP0ve2hRmvAiFXBuuv9RUtQlBiRnzmhHoJOMgkX0CsMR7+8kMRpTfeDUYq2xp5s5w==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/core": "^3.20.4"
+ "@tiptap/core": "3.22.4"
}
},
"node_modules/@tiptap/extension-code-block": {
- "version": "3.20.4",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-code-block/-/extension-code-block-3.20.4.tgz",
- "integrity": "sha512-Zlw3FrXTy01+o1yISeX/LC+iJeHA+ym602bMXGmtA6lyl7QSOSO7WExweJ6xeJGhbCjldwT5al6fkRAs8iGJZg==",
+ "version": "3.22.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-code-block/-/extension-code-block-3.22.4.tgz",
+ "integrity": "sha512-MEurzNXfMET3rhjpoPJYUgMfxTdTqbzT9+ToFrqNGAHocdXVm6m1hhO2frVC7fEtHPnxXKsn0Z3NUbCRkRTLuA==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/core": "^3.20.4",
- "@tiptap/pm": "^3.20.4"
+ "@tiptap/core": "3.22.4",
+ "@tiptap/pm": "3.22.4"
}
},
"node_modules/@tiptap/extension-color": {
- "version": "3.20.4",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-color/-/extension-color-3.20.4.tgz",
- "integrity": "sha512-+OT9wWEJnqoWmzfqPYt0oWm8LZcH+D44Z3jA2TNzBj4tLGQ2YPxN2SyS12AlRi7MuguVT7utFy7qDXrfir8eUA==",
+ "version": "3.22.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-color/-/extension-color-3.22.4.tgz",
+ "integrity": "sha512-1vDuVsrOETshe4j4nZhWalbKYcWfNybRCe30h829ExX06XwFryUYLb/LgTIaGCr9beWZUldsK+vOkBWdDTGMTw==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/extension-text-style": "^3.20.4"
+ "@tiptap/extension-text-style": "3.22.4"
}
},
"node_modules/@tiptap/extension-document": {
- "version": "3.20.4",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-document/-/extension-document-3.20.4.tgz",
- "integrity": "sha512-zF1CIFVLt8MfSpWWnPwtGyxPOsT0xYM2qJKcXf2yZcTG37wDKmUi6heG53vGigIavbQlLaAFvs+1mNdOu2x/0A==",
+ "version": "3.22.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-document/-/extension-document-3.22.4.tgz",
+ "integrity": "sha512-XQKla1+703FqQJC48tPDVgt9ucGiFbIEmQdOg5L5o07z9a6/NzuaZAc+1zJ7NxcUZzy+z6wBn1PrVMTiqiSXlw==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/core": "^3.20.4"
+ "@tiptap/core": "3.22.4"
}
},
"node_modules/@tiptap/extension-dropcursor": {
- "version": "3.20.4",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-dropcursor/-/extension-dropcursor-3.20.4.tgz",
- "integrity": "sha512-TgMwvZ8myXYdmd6bUV7qkpZXv7ZUiSmX/8eo+iPEzYo2CnDLAGvDKgC50nfq/g87SDvfBgPuAiBfFvsMQQWaTw==",
+ "version": "3.22.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-dropcursor/-/extension-dropcursor-3.22.4.tgz",
+ "integrity": "sha512-N9/yMDC35jJp0V/naL0+6gi4gUDUIcPpWEzFdCDWUSYBA8mt41c1kI1ZU7UTKYIBzTClenhYHRc2XKZxxx0+LQ==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/extensions": "^3.20.4"
+ "@tiptap/extensions": "3.22.4"
}
},
"node_modules/@tiptap/extension-floating-menu": {
- "version": "3.20.4",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-floating-menu/-/extension-floating-menu-3.20.4.tgz",
- "integrity": "sha512-AaPTFhoO8DBIElJyd/RTVJjkctvJuL+GHURX0npbtTxXq5HXbebVwf2ARNR7jMd/GThsmBaNJiGxZg4A2oeDqQ==",
+ "version": "3.22.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-floating-menu/-/extension-floating-menu-3.22.4.tgz",
+ "integrity": "sha512-DFuyYxgaZPgxum5z1yvJPbfYCvDdO8geXsdyqt0qYYdiat3aGE4ncJhiLRIFDhSHBhaZg5eCgu/YPYAN6jZnrA==",
"license": "MIT",
"optional": true,
"funding": {
@@ -3596,93 +3447,93 @@
},
"peerDependencies": {
"@floating-ui/dom": "^1.0.0",
- "@tiptap/core": "^3.20.4",
- "@tiptap/pm": "^3.20.4"
+ "@tiptap/core": "3.22.4",
+ "@tiptap/pm": "3.22.4"
}
},
"node_modules/@tiptap/extension-gapcursor": {
- "version": "3.20.4",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-gapcursor/-/extension-gapcursor-3.20.4.tgz",
- "integrity": "sha512-JJ6f1iQ1e0s4kISgq55U3UYGwWV/N9f0PYMtB6e3L+SBQjXnywaLK0g6vfN6IvTCC2vdIuqeSOX8VlSO97sJLw==",
+ "version": "3.22.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-gapcursor/-/extension-gapcursor-3.22.4.tgz",
+ "integrity": "sha512-UYBEUj3SFpKINIE7AdzcyeS3xICK+ee+YLBbuqNXyHStYChjJOohzJehqiqhjR16A88KQQ+ZjgyDcItKGygSog==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/extensions": "^3.20.4"
+ "@tiptap/extensions": "3.22.4"
}
},
"node_modules/@tiptap/extension-hard-break": {
- "version": "3.20.4",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-hard-break/-/extension-hard-break-3.20.4.tgz",
- "integrity": "sha512-gJbq58d8zB1gzyqVEopowej5CpW4/Fpg6oGJvlZxaCukqd0gJRWGC89K+jE62YA1Td4sfcKrekKvN7jm2y/ZUg==",
+ "version": "3.22.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-hard-break/-/extension-hard-break-3.22.4.tgz",
+ "integrity": "sha512-xq+a4dE7T6VwApCkh/yU3p30gn3F8g8Arb9CyEZm58/WIJUIGvHSTjDdHmvU16+kiWSBg+wOOsaFHhYjJjxcKA==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/core": "^3.20.4"
+ "@tiptap/core": "3.22.4"
}
},
"node_modules/@tiptap/extension-heading": {
- "version": "3.20.4",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-heading/-/extension-heading-3.20.4.tgz",
- "integrity": "sha512-xsnkmTGggJc5P2iCwS1lv8KFG31xC/GNPJKoi/3UH67j/lKDhA3AdtshsLeyv2FKtTtYDb8oV0IqzHB1MM6a7w==",
+ "version": "3.22.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-heading/-/extension-heading-3.22.4.tgz",
+ "integrity": "sha512-TUaj5f0Ir5qy9HKKt2ocnwfXKpZDYeHgbbP9gshKFzdq5PLe1RbIgkjfy6bnoI865cYjmPYWRjcT7XsKyIcb9Q==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/core": "^3.20.4"
+ "@tiptap/core": "3.22.4"
}
},
"node_modules/@tiptap/extension-horizontal-rule": {
- "version": "3.20.4",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-3.20.4.tgz",
- "integrity": "sha512-y6joCi49haAA0bo3EGUY+dWUMHH1GPUc84hxrBY/0pMs+Bn+kQ1+DQJErZDTWGJrlHPWU/yekBZT72SNdp0DNA==",
+ "version": "3.22.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-3.22.4.tgz",
+ "integrity": "sha512-cCI1HekGQwhY/MbgaKQ0R/7HcH5ZM1oFAyI/J72QGLC0XnF403S/OXoHMuBWr1mCu8hNiQWCzeNRJUty0iytNw==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/core": "^3.20.4",
- "@tiptap/pm": "^3.20.4"
+ "@tiptap/core": "3.22.4",
+ "@tiptap/pm": "3.22.4"
}
},
"node_modules/@tiptap/extension-image": {
- "version": "3.20.4",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-image/-/extension-image-3.20.4.tgz",
- "integrity": "sha512-57w2TevHQljTh6Xiry9duIm7NNOQAUSTwtwRn4GGLoKwHR8qXTxzp513ASrFOgR2kgs2TP471Au6RHf947P+jg==",
+ "version": "3.22.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-image/-/extension-image-3.22.4.tgz",
+ "integrity": "sha512-ZDc+fLaratTQ4IgnKcJJwfUgUgpcHjbZSBi6UQAILJwkflMy1Zxj8mpbma5P934nLSI+uDnR5ret6ZZLNITKhA==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/core": "^3.20.4"
+ "@tiptap/core": "3.22.4"
}
},
"node_modules/@tiptap/extension-italic": {
- "version": "3.20.4",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-italic/-/extension-italic-3.20.4.tgz",
- "integrity": "sha512-4ZqiWr7cmqPFux8tj1ZLiYytyWf343IvQemNX6AvVWvscrJcrfj3YX4Le2BA0RW3A3M6RpLQXXozuF8vxYFDeQ==",
+ "version": "3.22.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-italic/-/extension-italic-3.22.4.tgz",
+ "integrity": "sha512-fVSDx5AYXgDI3v2zZIqb7V8EewthwM2NJ/ZCX+XaxRsqNEpnjVhgHs7UlvDqK1wj2OJ6zmUNjPtVlAFRxwT+HQ==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/core": "^3.20.4"
+ "@tiptap/core": "3.22.4"
}
},
"node_modules/@tiptap/extension-link": {
- "version": "3.20.4",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-link/-/extension-link-3.20.4.tgz",
- "integrity": "sha512-JNDSkWrVdb8NSvbQXwHWvK5tCMbTWwOHFOweknQZ1JPK4dei9FJVofYQaHyW4bJBdcCjds3NZSnXE8DM9iAWmg==",
+ "version": "3.22.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-link/-/extension-link-3.22.4.tgz",
+ "integrity": "sha512-uoP3yus02uwGPVzW2QaEPJWVIrUb/r5nKm6c8DiJv9fNSX1+gykZZMg42c6GwRFLZ/vyfWjVCbAE03VMUqafgA==",
"license": "MIT",
"dependencies": {
"linkifyjs": "^4.3.2"
@@ -3692,190 +3543,184 @@
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/core": "^3.20.4",
- "@tiptap/pm": "^3.20.4"
+ "@tiptap/core": "3.22.4",
+ "@tiptap/pm": "3.22.4"
}
},
"node_modules/@tiptap/extension-list": {
- "version": "3.20.4",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-list/-/extension-list-3.20.4.tgz",
- "integrity": "sha512-X+5plTKhOioNcQ4KsAFJJSb/3+zR8Xhdpow4HzXtoV1KcbdDey1fhZdpsfkbrzCL0s6/wAgwZuAchCK7HujurQ==",
+ "version": "3.22.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-list/-/extension-list-3.22.4.tgz",
+ "integrity": "sha512-Xe8UFvvHmyp/c/TJsFwlwU9CWACYbBirNsluJ3U1+H8BTu1wqdrT/AXR5uIXeyCl5kiWKgX5q71eHWbYFOrqrg==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/core": "^3.20.4",
- "@tiptap/pm": "^3.20.4"
+ "@tiptap/core": "3.22.4",
+ "@tiptap/pm": "3.22.4"
}
},
"node_modules/@tiptap/extension-list-item": {
- "version": "3.20.4",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-list-item/-/extension-list-item-3.20.4.tgz",
- "integrity": "sha512-QoTc5RACXaZF+vIIBBxjGO7D0oWFUDgBKJCpvUZ0CoGGKosnfe4a9I5THFyLj4201cf0oUqgf1oZhTqETGxlVw==",
+ "version": "3.22.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-list-item/-/extension-list-item-3.22.4.tgz",
+ "integrity": "sha512-H659KXTvggSypIDWSOJBZ37jh9pKjQriDDvYPYvOZCdfij0D0hsDXN/wXoypArneUkoBdgruHfTtMkFOaQlgkw==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/extension-list": "^3.20.4"
+ "@tiptap/extension-list": "3.22.4"
}
},
"node_modules/@tiptap/extension-list-keymap": {
- "version": "3.20.4",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-list-keymap/-/extension-list-keymap-3.20.4.tgz",
- "integrity": "sha512-RIqXM649+8IP7p/KVfaGlJiwjCylm1m6OPlaoM3K8O7oEOGRQzNeexexECCD2jsXRxew4E+vBNMD2orXqJmu8A==",
+ "version": "3.22.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-list-keymap/-/extension-list-keymap-3.22.4.tgz",
+ "integrity": "sha512-t/zhker4oIS78AIGYDdFFfZC6zSBlszfD7z/zqFLGCg5PHNNgkZK5hKj6Vyix6D2SapRn/ajnx+8mhbKIUH5eA==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/extension-list": "^3.20.4"
+ "@tiptap/extension-list": "3.22.4"
}
},
"node_modules/@tiptap/extension-ordered-list": {
- "version": "3.20.4",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-ordered-list/-/extension-ordered-list-3.20.4.tgz",
- "integrity": "sha512-3budNL8BgBon3TcXZ4hjT0YpFvx1Ka3uSIECKDxHgES+OQcR+6cagxSb60gFEccf3Dr0PIwcVTY6g14lC1qKRQ==",
+ "version": "3.22.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-ordered-list/-/extension-ordered-list-3.22.4.tgz",
+ "integrity": "sha512-w77hPVf7pcHt97vfrybg/l0t5CimCd4y75OJKuHuo3CfgM5xbUP/gaPNMDyLLe7MYole/UHi/XvG3XjgzqTzAw==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/extension-list": "^3.20.4"
+ "@tiptap/extension-list": "3.22.4"
}
},
"node_modules/@tiptap/extension-paragraph": {
- "version": "3.20.4",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-paragraph/-/extension-paragraph-3.20.4.tgz",
- "integrity": "sha512-lm6fOScWuZAF/Sfp97igUwFd3L1QHIVLAWP5NVdh0DTLrEIt4rMBmsww+yOpMQRhvz2uTgMbMXynrimhzi/QVw==",
+ "version": "3.22.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-paragraph/-/extension-paragraph-3.22.4.tgz",
+ "integrity": "sha512-de6dFkIhigiENESY6rNJ3yTVS/337ybfP30dNPudTwGe9oAu9ZCS+04j6QCvXSjhlI3ULiv7wiSHqrP26Gd+Hw==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/core": "^3.20.4"
+ "@tiptap/core": "3.22.4"
}
},
"node_modules/@tiptap/extension-placeholder": {
- "version": "3.20.4",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-placeholder/-/extension-placeholder-3.20.4.tgz",
- "integrity": "sha512-GB0KWtqm83YHG8cnqBLijvUBm+xvLfQHDfFRRH2fb3EzH3eIsM9jKRC31ADT27RSV1zVpHMFGcP3/pWpdrN1Lw==",
+ "version": "3.22.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-placeholder/-/extension-placeholder-3.22.4.tgz",
+ "integrity": "sha512-Z3wtWL+KufwkC7CkJge5enAxx4q8C3oOYixme02snY9zfjX3V/1pjAmEfP4wxScgM5GIuTEJ83B9Yz3wRzPA6Q==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/extensions": "^3.20.4"
+ "@tiptap/extensions": "3.22.4"
}
},
"node_modules/@tiptap/extension-strike": {
- "version": "3.20.4",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-strike/-/extension-strike-3.20.4.tgz",
- "integrity": "sha512-It1Px9uDGTsVqyyg6cy7DigLoenljpQwqdI0jssM7QclZrHnsrye9fZxBBiiuCzzV1305MxKgHvratkHwqmVNA==",
+ "version": "3.22.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-strike/-/extension-strike-3.22.4.tgz",
+ "integrity": "sha512-aRHWQj42HiailXSC9LkKYM3jWMcSeGwOjbqM4PiuxQZmHVDRFmeHkfJItOdn2cSHaO0vuEVK+TvrWUWsBFi3pg==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/core": "^3.20.4"
+ "@tiptap/core": "3.22.4"
}
},
"node_modules/@tiptap/extension-text": {
- "version": "3.20.4",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-text/-/extension-text-3.20.4.tgz",
- "integrity": "sha512-jchJcBZixDEO2J66Zx5dchsI2mA6IYsROqF8P1poxL4ienH7RVQRCTsBNnSfIeOtREKKWeOU/tEs5fcpvvGwIQ==",
+ "version": "3.22.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-text/-/extension-text-3.22.4.tgz",
+ "integrity": "sha512-mM69uUW5cSxIhyEpWXi/YcfyupcJMDLCPEfYi62awH0iOP/LRoCv/nHjJq4Hyj/KxRJbe8HKwIUnqaCUf7m5Pg==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/core": "^3.20.4"
+ "@tiptap/core": "3.22.4"
}
},
"node_modules/@tiptap/extension-text-align": {
- "version": "3.20.4",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-text-align/-/extension-text-align-3.20.4.tgz",
- "integrity": "sha512-6ZuRyClIyCimXu+S5LQ54DueEsYg5VOVOmubOVbG+WAjM9svn9Z8gv2sNDah2yEqXrX06B02zYcSyMiD7CHbfA==",
+ "version": "3.22.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-text-align/-/extension-text-align-3.22.4.tgz",
+ "integrity": "sha512-W7TnXWSyfDXSatGXp5y/CahE8G4btrQPb0/sy+eG+42FxdzYsqvh1ys3OE9j2XSuTrZ1q/tZA/NLPUkc7vw6Kw==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/core": "^3.20.4"
+ "@tiptap/core": "3.22.4"
}
},
"node_modules/@tiptap/extension-text-style": {
- "version": "3.20.4",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-text-style/-/extension-text-style-3.20.4.tgz",
- "integrity": "sha512-PvW0Ja7ahWpo4bRuR8YCCVv4PH8lXjzhzlBAa4bMbsumOg+GbhX8Su7fwqd+IIPrHqfPXz9HTBMApSfzP6/08A==",
+ "version": "3.22.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-text-style/-/extension-text-style-3.22.4.tgz",
+ "integrity": "sha512-24DVBdySNKq3ovY+v9ERVxAyHStDa6ftUlyoHuZv0YXQ2amjUNOmqQtGEHBIULpCbBb1jZ+atHhv9MBZ0Ia9Pw==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/core": "^3.20.4"
+ "@tiptap/core": "3.22.4"
}
},
"node_modules/@tiptap/extension-underline": {
- "version": "3.20.4",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-underline/-/extension-underline-3.20.4.tgz",
- "integrity": "sha512-0OjMc3FDujX16G+jhvqcY/mLot8SrNtDu8ggUwNLAfiI/QIvMVgk7giFD71DATC/4Nb8i/iwAEegTD8MxBIXCg==",
+ "version": "3.22.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-underline/-/extension-underline-3.22.4.tgz",
+ "integrity": "sha512-08kGdbhIrA6h10GWXqOkqIveaBj5tmxclK208/nUIAlonI9hPd739vu7fmVtpnmqCnSSNpoRtU4u6Gj5at0ZpA==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/core": "^3.20.4"
+ "@tiptap/core": "3.22.4"
}
},
"node_modules/@tiptap/extensions": {
- "version": "3.20.4",
- "resolved": "https://registry.npmjs.org/@tiptap/extensions/-/extensions-3.20.4.tgz",
- "integrity": "sha512-8p6hVT65DjuQjtEdlH6ewX9SOJHlVQAOee3sWIJQmeJNRnZNvqPIBLleebUqDiljNTpxBv6s6QWkSTKgf3btwg==",
+ "version": "3.22.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/extensions/-/extensions-3.22.4.tgz",
+ "integrity": "sha512-fOe8VptJvLPs32bNdUYo8SRyljwqKNQVXWW056VoXIc5en/59OdJlJQVeHI0jRRciH3MtrqODi/gfJR0VHNZ8A==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/core": "^3.20.4",
- "@tiptap/pm": "^3.20.4"
+ "@tiptap/core": "3.22.4",
+ "@tiptap/pm": "3.22.4"
}
},
"node_modules/@tiptap/pm": {
- "version": "3.20.4",
- "resolved": "https://registry.npmjs.org/@tiptap/pm/-/pm-3.20.4.tgz",
- "integrity": "sha512-rCHYSBToilBEuI6PtjziHDdRkABH/XqwJ7dG4Amn/SD3yGiZKYCiEApQlTUS2zZeo8DsLeuqqqB4vEOeD4OEPg==",
+ "version": "3.22.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/pm/-/pm-3.22.4.tgz",
+ "integrity": "sha512-hj8Qka6WcHRllHUdeSjDnq2XaisUo4KsoGJc1WcFpoa1Yd+OeD861zUMnV7DFVGdZRy45Obht0CUYJpXQ4yA4w==",
"license": "MIT",
"dependencies": {
"prosemirror-changeset": "^2.3.0",
- "prosemirror-collab": "^1.3.1",
"prosemirror-commands": "^1.6.2",
"prosemirror-dropcursor": "^1.8.1",
"prosemirror-gapcursor": "^1.3.2",
"prosemirror-history": "^1.4.1",
- "prosemirror-inputrules": "^1.4.0",
"prosemirror-keymap": "^1.2.2",
- "prosemirror-markdown": "^1.13.1",
- "prosemirror-menu": "^1.2.4",
"prosemirror-model": "^1.24.1",
- "prosemirror-schema-basic": "^1.2.3",
"prosemirror-schema-list": "^1.5.0",
"prosemirror-state": "^1.4.3",
"prosemirror-tables": "^1.6.4",
- "prosemirror-trailing-node": "^3.0.0",
"prosemirror-transform": "^1.10.2",
"prosemirror-view": "^1.38.1"
},
@@ -3885,9 +3730,9 @@
}
},
"node_modules/@tiptap/react": {
- "version": "3.20.4",
- "resolved": "https://registry.npmjs.org/@tiptap/react/-/react-3.20.4.tgz",
- "integrity": "sha512-1B8iWsHWwb5TeyVaUs8BRPzwWo4PsLQcl03urHaz0zTJ8DauopqvxzV3+lem1OkzRHn7wnrapDvwmIGoROCaQw==",
+ "version": "3.22.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/react/-/react-3.22.4.tgz",
+ "integrity": "sha512-XIQZPwLakR1t8+Q1UeCpr+kUHDWxpJzGy9r2xUi3mpPd6Wh8dtNltScBkUlCcr0sqc6J1GF6Is02JJVQGmCZMA==",
"license": "MIT",
"dependencies": {
"@types/use-sync-external-store": "^0.0.6",
@@ -3899,12 +3744,12 @@
"url": "https://github.com/sponsors/ueberdosis"
},
"optionalDependencies": {
- "@tiptap/extension-bubble-menu": "^3.20.4",
- "@tiptap/extension-floating-menu": "^3.20.4"
+ "@tiptap/extension-bubble-menu": "^3.22.4",
+ "@tiptap/extension-floating-menu": "^3.22.4"
},
"peerDependencies": {
- "@tiptap/core": "^3.20.4",
- "@tiptap/pm": "^3.20.4",
+ "@tiptap/core": "3.22.4",
+ "@tiptap/pm": "3.22.4",
"@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0",
"@types/react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0",
"react": "^17.0.0 || ^18.0.0 || ^19.0.0",
@@ -3912,41 +3757,52 @@
}
},
"node_modules/@tiptap/starter-kit": {
- "version": "3.20.4",
- "resolved": "https://registry.npmjs.org/@tiptap/starter-kit/-/starter-kit-3.20.4.tgz",
- "integrity": "sha512-WcyK6hsTl8eBsQhQ+d9Sq8fYZKOYdL+D45MyH3hz583elXqJlW3h3JPFYb0o87gddGxn8Mm57OA/gA1zEdeDMw==",
+ "version": "3.22.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/starter-kit/-/starter-kit-3.22.4.tgz",
+ "integrity": "sha512-qWjw+vfdin1rzMRpRU4cC5tLTwMJtUpXeQukv+6mOqqvhptuwuZBjUHImVEJaSPoHXS7+1ut+nTnrLyWyEuE5Q==",
"license": "MIT",
"dependencies": {
- "@tiptap/core": "^3.20.4",
- "@tiptap/extension-blockquote": "^3.20.4",
- "@tiptap/extension-bold": "^3.20.4",
- "@tiptap/extension-bullet-list": "^3.20.4",
- "@tiptap/extension-code": "^3.20.4",
- "@tiptap/extension-code-block": "^3.20.4",
- "@tiptap/extension-document": "^3.20.4",
- "@tiptap/extension-dropcursor": "^3.20.4",
- "@tiptap/extension-gapcursor": "^3.20.4",
- "@tiptap/extension-hard-break": "^3.20.4",
- "@tiptap/extension-heading": "^3.20.4",
- "@tiptap/extension-horizontal-rule": "^3.20.4",
- "@tiptap/extension-italic": "^3.20.4",
- "@tiptap/extension-link": "^3.20.4",
- "@tiptap/extension-list": "^3.20.4",
- "@tiptap/extension-list-item": "^3.20.4",
- "@tiptap/extension-list-keymap": "^3.20.4",
- "@tiptap/extension-ordered-list": "^3.20.4",
- "@tiptap/extension-paragraph": "^3.20.4",
- "@tiptap/extension-strike": "^3.20.4",
- "@tiptap/extension-text": "^3.20.4",
- "@tiptap/extension-underline": "^3.20.4",
- "@tiptap/extensions": "^3.20.4",
- "@tiptap/pm": "^3.20.4"
+ "@tiptap/core": "^3.22.4",
+ "@tiptap/extension-blockquote": "^3.22.4",
+ "@tiptap/extension-bold": "^3.22.4",
+ "@tiptap/extension-bullet-list": "^3.22.4",
+ "@tiptap/extension-code": "^3.22.4",
+ "@tiptap/extension-code-block": "^3.22.4",
+ "@tiptap/extension-document": "^3.22.4",
+ "@tiptap/extension-dropcursor": "^3.22.4",
+ "@tiptap/extension-gapcursor": "^3.22.4",
+ "@tiptap/extension-hard-break": "^3.22.4",
+ "@tiptap/extension-heading": "^3.22.4",
+ "@tiptap/extension-horizontal-rule": "^3.22.4",
+ "@tiptap/extension-italic": "^3.22.4",
+ "@tiptap/extension-link": "^3.22.4",
+ "@tiptap/extension-list": "^3.22.4",
+ "@tiptap/extension-list-item": "^3.22.4",
+ "@tiptap/extension-list-keymap": "^3.22.4",
+ "@tiptap/extension-ordered-list": "^3.22.4",
+ "@tiptap/extension-paragraph": "^3.22.4",
+ "@tiptap/extension-strike": "^3.22.4",
+ "@tiptap/extension-text": "^3.22.4",
+ "@tiptap/extension-underline": "^3.22.4",
+ "@tiptap/extensions": "^3.22.4",
+ "@tiptap/pm": "^3.22.4"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
}
},
+ "node_modules/@tybys/wasm-util": {
+ "version": "0.10.1",
+ "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz",
+ "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "tslib": "^2.4.0"
+ }
+ },
"node_modules/@types/aria-query": {
"version": "5.0.4",
"resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz",
@@ -3954,51 +3810,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/@types/babel__core": {
- "version": "7.20.5",
- "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
- "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/parser": "^7.20.7",
- "@babel/types": "^7.20.7",
- "@types/babel__generator": "*",
- "@types/babel__template": "*",
- "@types/babel__traverse": "*"
- }
- },
- "node_modules/@types/babel__generator": {
- "version": "7.27.0",
- "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz",
- "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/types": "^7.0.0"
- }
- },
- "node_modules/@types/babel__template": {
- "version": "7.4.4",
- "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz",
- "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/parser": "^7.1.0",
- "@babel/types": "^7.0.0"
- }
- },
- "node_modules/@types/babel__traverse": {
- "version": "7.28.0",
- "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz",
- "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/types": "^7.28.2"
- }
- },
"node_modules/@types/chai": {
"version": "5.2.3",
"resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz",
@@ -4031,36 +3842,14 @@
"dev": true,
"license": "MIT"
},
- "node_modules/@types/linkify-it": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz",
- "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==",
- "license": "MIT"
- },
- "node_modules/@types/markdown-it": {
- "version": "14.1.2",
- "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.2.tgz",
- "integrity": "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==",
- "license": "MIT",
- "dependencies": {
- "@types/linkify-it": "^5",
- "@types/mdurl": "^2"
- }
- },
- "node_modules/@types/mdurl": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz",
- "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==",
- "license": "MIT"
- },
"node_modules/@types/node": {
- "version": "25.3.3",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-25.3.3.tgz",
- "integrity": "sha512-DpzbrH7wIcBaJibpKo9nnSQL0MTRdnWttGyE5haGwK86xgMOkFLp7vEyfQPGLOJh5wNYiJ3V9PmUMDhV9u8kkQ==",
+ "version": "25.6.0",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-25.6.0.tgz",
+ "integrity": "sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "undici-types": "~7.18.0"
+ "undici-types": "~7.19.0"
}
},
"node_modules/@types/qrcode": {
@@ -4105,20 +3894,20 @@
"license": "MIT"
},
"node_modules/@typescript-eslint/eslint-plugin": {
- "version": "8.56.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.56.1.tgz",
- "integrity": "sha512-Jz9ZztpB37dNC+HU2HI28Bs9QXpzCz+y/twHOwhyrIRdbuVDxSytJNDl6z/aAKlaRIwC7y8wJdkBv7FxYGgi0A==",
+ "version": "8.59.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.59.0.tgz",
+ "integrity": "sha512-HyAZtpdkgZwpq8Sz3FSUvCR4c+ScbuWa9AksK2Jweub7w4M3yTz4O11AqVJzLYjy/B9ZWPyc81I+mOdJU/bDQw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/regexpp": "^4.12.2",
- "@typescript-eslint/scope-manager": "8.56.1",
- "@typescript-eslint/type-utils": "8.56.1",
- "@typescript-eslint/utils": "8.56.1",
- "@typescript-eslint/visitor-keys": "8.56.1",
+ "@typescript-eslint/scope-manager": "8.59.0",
+ "@typescript-eslint/type-utils": "8.59.0",
+ "@typescript-eslint/utils": "8.59.0",
+ "@typescript-eslint/visitor-keys": "8.59.0",
"ignore": "^7.0.5",
"natural-compare": "^1.4.0",
- "ts-api-utils": "^2.4.0"
+ "ts-api-utils": "^2.5.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -4128,22 +3917,22 @@
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
- "@typescript-eslint/parser": "^8.56.1",
+ "@typescript-eslint/parser": "^8.59.0",
"eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
- "typescript": ">=4.8.4 <6.0.0"
+ "typescript": ">=4.8.4 <6.1.0"
}
},
"node_modules/@typescript-eslint/parser": {
- "version": "8.56.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.56.1.tgz",
- "integrity": "sha512-klQbnPAAiGYFyI02+znpBRLyjL4/BrBd0nyWkdC0s/6xFLkXYQ8OoRrSkqacS1ddVxf/LDyODIKbQ5TgKAf/Fg==",
+ "version": "8.59.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.59.0.tgz",
+ "integrity": "sha512-TI1XGwKbDpo9tRW8UDIXCOeLk55qe9ZFGs8MTKU6/M08HWTw52DD/IYhfQtOEhEdPhLMT26Ka/x7p70nd3dzDg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/scope-manager": "8.56.1",
- "@typescript-eslint/types": "8.56.1",
- "@typescript-eslint/typescript-estree": "8.56.1",
- "@typescript-eslint/visitor-keys": "8.56.1",
+ "@typescript-eslint/scope-manager": "8.59.0",
+ "@typescript-eslint/types": "8.59.0",
+ "@typescript-eslint/typescript-estree": "8.59.0",
+ "@typescript-eslint/visitor-keys": "8.59.0",
"debug": "^4.4.3"
},
"engines": {
@@ -4155,18 +3944,18 @@
},
"peerDependencies": {
"eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
- "typescript": ">=4.8.4 <6.0.0"
+ "typescript": ">=4.8.4 <6.1.0"
}
},
"node_modules/@typescript-eslint/project-service": {
- "version": "8.56.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.56.1.tgz",
- "integrity": "sha512-TAdqQTzHNNvlVFfR+hu2PDJrURiwKsUvxFn1M0h95BB8ah5jejas08jUWG4dBA68jDMI988IvtfdAI53JzEHOQ==",
+ "version": "8.59.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.59.0.tgz",
+ "integrity": "sha512-Lw5ITrR5s5TbC19YSvlr63ZfLaJoU6vtKTHyB0GQOpX0W7d5/Ir6vUahWi/8Sps/nOukZQ0IB3SmlxZnjaKVnw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/tsconfig-utils": "^8.56.1",
- "@typescript-eslint/types": "^8.56.1",
+ "@typescript-eslint/tsconfig-utils": "^8.59.0",
+ "@typescript-eslint/types": "^8.59.0",
"debug": "^4.4.3"
},
"engines": {
@@ -4177,18 +3966,18 @@
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
- "typescript": ">=4.8.4 <6.0.0"
+ "typescript": ">=4.8.4 <6.1.0"
}
},
"node_modules/@typescript-eslint/scope-manager": {
- "version": "8.56.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.56.1.tgz",
- "integrity": "sha512-YAi4VDKcIZp0O4tz/haYKhmIDZFEUPOreKbfdAN3SzUDMcPhJ8QI99xQXqX+HoUVq8cs85eRKnD+rne2UAnj2w==",
+ "version": "8.59.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.59.0.tgz",
+ "integrity": "sha512-UzR16Ut8IpA3Mc4DbgAShlPPkVm8xXMWafXxB0BocaVRHs8ZGakAxGRskF7FId3sdk9lgGD73GSFaWmWFDE4dg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "8.56.1",
- "@typescript-eslint/visitor-keys": "8.56.1"
+ "@typescript-eslint/types": "8.59.0",
+ "@typescript-eslint/visitor-keys": "8.59.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -4199,9 +3988,9 @@
}
},
"node_modules/@typescript-eslint/tsconfig-utils": {
- "version": "8.56.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.56.1.tgz",
- "integrity": "sha512-qOtCYzKEeyr3aR9f28mPJqBty7+DBqsdd63eO0yyDwc6vgThj2UjWfJIcsFeSucYydqcuudMOprZ+x1SpF3ZuQ==",
+ "version": "8.59.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.59.0.tgz",
+ "integrity": "sha512-91Sbl3s4Kb3SybliIY6muFBmHVv+pYXfybC4Oolp3dvk8BvIE3wOPc+403CWIT7mJNkfQRGtdqghzs2+Z91Tqg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -4212,21 +4001,21 @@
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
- "typescript": ">=4.8.4 <6.0.0"
+ "typescript": ">=4.8.4 <6.1.0"
}
},
"node_modules/@typescript-eslint/type-utils": {
- "version": "8.56.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.56.1.tgz",
- "integrity": "sha512-yB/7dxi7MgTtGhZdaHCemf7PuwrHMenHjmzgUW1aJpO+bBU43OycnM3Wn+DdvDO/8zzA9HlhaJ0AUGuvri4oGg==",
+ "version": "8.59.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.59.0.tgz",
+ "integrity": "sha512-3TRiZaQSltGqGeNrJzzr1+8YcEobKH9rHnqIp/1psfKFmhRQDNMGP5hBufanYTGznwShzVLs3Mz+gDN7HkWfXg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "8.56.1",
- "@typescript-eslint/typescript-estree": "8.56.1",
- "@typescript-eslint/utils": "8.56.1",
+ "@typescript-eslint/types": "8.59.0",
+ "@typescript-eslint/typescript-estree": "8.59.0",
+ "@typescript-eslint/utils": "8.59.0",
"debug": "^4.4.3",
- "ts-api-utils": "^2.4.0"
+ "ts-api-utils": "^2.5.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -4237,13 +4026,13 @@
},
"peerDependencies": {
"eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
- "typescript": ">=4.8.4 <6.0.0"
+ "typescript": ">=4.8.4 <6.1.0"
}
},
"node_modules/@typescript-eslint/types": {
- "version": "8.56.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.56.1.tgz",
- "integrity": "sha512-dbMkdIUkIkchgGDIv7KLUpa0Mda4IYjo4IAMJUZ+3xNoUXxMsk9YtKpTHSChRS85o+H9ftm51gsK1dZReY9CVw==",
+ "version": "8.59.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.59.0.tgz",
+ "integrity": "sha512-nLzdsT1gdOgFxxxwrlNVUBzSNBEEHJ86bblmk4QAS6stfig7rcJzWKqCyxFy3YRRHXDWEkb2NralA1nOYkkm/A==",
"dev": true,
"license": "MIT",
"engines": {
@@ -4255,21 +4044,21 @@
}
},
"node_modules/@typescript-eslint/typescript-estree": {
- "version": "8.56.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.56.1.tgz",
- "integrity": "sha512-qzUL1qgalIvKWAf9C1HpvBjif+Vm6rcT5wZd4VoMb9+Km3iS3Cv9DY6dMRMDtPnwRAFyAi7YXJpTIEXLvdfPxg==",
+ "version": "8.59.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.59.0.tgz",
+ "integrity": "sha512-O9Re9P1BmBLFJyikRbQpLku/QA3/AueZNO9WePLBwQrvkixTmDe8u76B6CYUAITRl/rHawggEqUGn5QIkVRLMw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/project-service": "8.56.1",
- "@typescript-eslint/tsconfig-utils": "8.56.1",
- "@typescript-eslint/types": "8.56.1",
- "@typescript-eslint/visitor-keys": "8.56.1",
+ "@typescript-eslint/project-service": "8.59.0",
+ "@typescript-eslint/tsconfig-utils": "8.59.0",
+ "@typescript-eslint/types": "8.59.0",
+ "@typescript-eslint/visitor-keys": "8.59.0",
"debug": "^4.4.3",
"minimatch": "^10.2.2",
"semver": "^7.7.3",
"tinyglobby": "^0.2.15",
- "ts-api-utils": "^2.4.0"
+ "ts-api-utils": "^2.5.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -4279,20 +4068,20 @@
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
- "typescript": ">=4.8.4 <6.0.0"
+ "typescript": ">=4.8.4 <6.1.0"
}
},
"node_modules/@typescript-eslint/utils": {
- "version": "8.56.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.56.1.tgz",
- "integrity": "sha512-HPAVNIME3tABJ61siYlHzSWCGtOoeP2RTIaHXFMPqjrQKCGB9OgUVdiNgH7TJS2JNIQ5qQ4RsAUDuGaGme/KOA==",
+ "version": "8.59.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.59.0.tgz",
+ "integrity": "sha512-I1R/K7V07XsMJ12Oaxg/O9GfrysGTmCRhvZJBv0RE0NcULMzjqVpR5kRRQjHsz3J/bElU7HwCO7zkqL+MSUz+g==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/eslint-utils": "^4.9.1",
- "@typescript-eslint/scope-manager": "8.56.1",
- "@typescript-eslint/types": "8.56.1",
- "@typescript-eslint/typescript-estree": "8.56.1"
+ "@typescript-eslint/scope-manager": "8.59.0",
+ "@typescript-eslint/types": "8.59.0",
+ "@typescript-eslint/typescript-estree": "8.59.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -4303,17 +4092,17 @@
},
"peerDependencies": {
"eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
- "typescript": ">=4.8.4 <6.0.0"
+ "typescript": ">=4.8.4 <6.1.0"
}
},
"node_modules/@typescript-eslint/visitor-keys": {
- "version": "8.56.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.56.1.tgz",
- "integrity": "sha512-KiROIzYdEV85YygXw6BI/Dx4fnBlFQu6Mq4QE4MOH9fFnhohw6wX/OAvDY2/C+ut0I3RSPKenvZJIVYqJNkhEw==",
+ "version": "8.59.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.59.0.tgz",
+ "integrity": "sha512-/uejZt4dSere1bx12WLlPfv8GktzcaDtuJ7s42/HEZ5zGj9oxRaD4bj7qwSunXkf+pbAhFt2zjpHYUiT5lHf0Q==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "8.56.1",
+ "@typescript-eslint/types": "8.59.0",
"eslint-visitor-keys": "^5.0.0"
},
"engines": {
@@ -4338,52 +4127,57 @@
}
},
"node_modules/@vitejs/plugin-react": {
- "version": "5.1.4",
- "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-5.1.4.tgz",
- "integrity": "sha512-VIcFLdRi/VYRU8OL/puL7QXMYafHmqOnwTZY50U1JPlCNj30PxCMx65c494b1K9be9hX83KVt0+gTEwTWLqToA==",
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-6.0.1.tgz",
+ "integrity": "sha512-l9X/E3cDb+xY3SWzlG1MOGt2usfEHGMNIaegaUGFsLkb3RCn/k8/TOXBcab+OndDI4TBtktT8/9BwwW8Vi9KUQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/core": "^7.29.0",
- "@babel/plugin-transform-react-jsx-self": "^7.27.1",
- "@babel/plugin-transform-react-jsx-source": "^7.27.1",
- "@rolldown/pluginutils": "1.0.0-rc.3",
- "@types/babel__core": "^7.20.5",
- "react-refresh": "^0.18.0"
+ "@rolldown/pluginutils": "1.0.0-rc.7"
},
"engines": {
"node": "^20.19.0 || >=22.12.0"
},
"peerDependencies": {
- "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0"
+ "@rolldown/plugin-babel": "^0.1.7 || ^0.2.0",
+ "babel-plugin-react-compiler": "^1.0.0",
+ "vite": "^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@rolldown/plugin-babel": {
+ "optional": true
+ },
+ "babel-plugin-react-compiler": {
+ "optional": true
+ }
}
},
"node_modules/@vitest/expect": {
- "version": "4.0.18",
- "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.0.18.tgz",
- "integrity": "sha512-8sCWUyckXXYvx4opfzVY03EOiYVxyNrHS5QxX3DAIi5dpJAAkyJezHCP77VMX4HKA2LDT/Jpfo8i2r5BE3GnQQ==",
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.5.tgz",
+ "integrity": "sha512-PWBaRY5JoKuRnHlUHfpV/KohFylaDZTupcXN1H9vYryNLOnitSw60Mw9IAE2r67NbwwzBw/Cc/8q9BK3kIX8Kw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@standard-schema/spec": "^1.0.0",
+ "@standard-schema/spec": "^1.1.0",
"@types/chai": "^5.2.2",
- "@vitest/spy": "4.0.18",
- "@vitest/utils": "4.0.18",
- "chai": "^6.2.1",
- "tinyrainbow": "^3.0.3"
+ "@vitest/spy": "4.1.5",
+ "@vitest/utils": "4.1.5",
+ "chai": "^6.2.2",
+ "tinyrainbow": "^3.1.0"
},
"funding": {
"url": "https://opencollective.com/vitest"
}
},
"node_modules/@vitest/mocker": {
- "version": "4.0.18",
- "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.0.18.tgz",
- "integrity": "sha512-HhVd0MDnzzsgevnOWCBj5Otnzobjy5wLBe4EdeeFGv8luMsGcYqDuFRMcttKWZA5vVO8RFjexVovXvAM4JoJDQ==",
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.5.tgz",
+ "integrity": "sha512-/x2EmFC4mT4NNzqvC3fmesuV97w5FC903KPmey4gsnJiMQ3Be1IlDKVaDaG8iqaLFHqJ2FVEkxZk5VmeLjIItw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@vitest/spy": "4.0.18",
+ "@vitest/spy": "4.1.5",
"estree-walker": "^3.0.3",
"magic-string": "^0.30.21"
},
@@ -4392,7 +4186,7 @@
},
"peerDependencies": {
"msw": "^2.4.9",
- "vite": "^6.0.0 || ^7.0.0-0"
+ "vite": "^6.0.0 || ^7.0.0 || ^8.0.0"
},
"peerDependenciesMeta": {
"msw": {
@@ -4404,26 +4198,26 @@
}
},
"node_modules/@vitest/pretty-format": {
- "version": "4.0.18",
- "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.0.18.tgz",
- "integrity": "sha512-P24GK3GulZWC5tz87ux0m8OADrQIUVDPIjjj65vBXYG17ZeU3qD7r+MNZ1RNv4l8CGU2vtTRqixrOi9fYk/yKw==",
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.5.tgz",
+ "integrity": "sha512-7I3q6l5qr03dVfMX2wCo9FxwSJbPdwKjy2uu/YPpU3wfHvIL4QHwVRp57OfGrDFeUJ8/8QdfBKIV12FTtLn00g==",
"dev": true,
"license": "MIT",
"dependencies": {
- "tinyrainbow": "^3.0.3"
+ "tinyrainbow": "^3.1.0"
},
"funding": {
"url": "https://opencollective.com/vitest"
}
},
"node_modules/@vitest/runner": {
- "version": "4.0.18",
- "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.0.18.tgz",
- "integrity": "sha512-rpk9y12PGa22Jg6g5M3UVVnTS7+zycIGk9ZNGN+m6tZHKQb7jrP7/77WfZy13Y/EUDd52NDsLRQhYKtv7XfPQw==",
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.1.5.tgz",
+ "integrity": "sha512-2D+o7Pr82IEO46YPpoA/YU0neeyr6FTerQb5Ro7BUnBuv6NQtT/kmVnczngiMEBhzgqz2UZYl5gArejsyERDSQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@vitest/utils": "4.0.18",
+ "@vitest/utils": "4.1.5",
"pathe": "^2.0.3"
},
"funding": {
@@ -4431,13 +4225,14 @@
}
},
"node_modules/@vitest/snapshot": {
- "version": "4.0.18",
- "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.0.18.tgz",
- "integrity": "sha512-PCiV0rcl7jKQjbgYqjtakly6T1uwv/5BQ9SwBLekVg/EaYeQFPiXcgrC2Y7vDMA8dM1SUEAEV82kgSQIlXNMvA==",
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.5.tgz",
+ "integrity": "sha512-zypXEt4KH/XgKGPUz4eC2AvErYx0My5hfL8oDb1HzGFpEk1P62bxSohdyOmvz+d9UJwanI68MKwr2EquOaOgMQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@vitest/pretty-format": "4.0.18",
+ "@vitest/pretty-format": "4.1.5",
+ "@vitest/utils": "4.1.5",
"magic-string": "^0.30.21",
"pathe": "^2.0.3"
},
@@ -4446,9 +4241,9 @@
}
},
"node_modules/@vitest/spy": {
- "version": "4.0.18",
- "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.0.18.tgz",
- "integrity": "sha512-cbQt3PTSD7P2OARdVW3qWER5EGq7PHlvE+QfzSC0lbwO+xnt7+XH06ZzFjFRgzUX//JmpxrCu92VdwvEPlWSNw==",
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.5.tgz",
+ "integrity": "sha512-2lNOsh6+R2Idnf1TCZqSwYlKN2E/iDlD8sgU59kYVl+OMDmvldO1VDk39smRfpUNwYpNRVn3w4YfuC7KfbBnkQ==",
"dev": true,
"license": "MIT",
"funding": {
@@ -4456,36 +4251,37 @@
}
},
"node_modules/@vitest/ui": {
- "version": "4.0.18",
- "resolved": "https://registry.npmjs.org/@vitest/ui/-/ui-4.0.18.tgz",
- "integrity": "sha512-CGJ25bc8fRi8Lod/3GHSvXRKi7nBo3kxh0ApW4yCjmrWmRmlT53B5E08XRSZRliygG0aVNxLrBEqPYdz/KcCtQ==",
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/@vitest/ui/-/ui-4.1.5.tgz",
+ "integrity": "sha512-3Z9HNFiV0IF1fk0JPiK+7kE1GcaIPefQQIBYur6PM5yFIq6agys3uqP/0t966e1wXfmjbRCHDe7qW236Xjwnag==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@vitest/utils": "4.0.18",
+ "@vitest/utils": "4.1.5",
"fflate": "^0.8.2",
- "flatted": "^3.3.3",
+ "flatted": "^3.4.2",
"pathe": "^2.0.3",
"sirv": "^3.0.2",
"tinyglobby": "^0.2.15",
- "tinyrainbow": "^3.0.3"
+ "tinyrainbow": "^3.1.0"
},
"funding": {
"url": "https://opencollective.com/vitest"
},
"peerDependencies": {
- "vitest": "4.0.18"
+ "vitest": "4.1.5"
}
},
"node_modules/@vitest/utils": {
- "version": "4.0.18",
- "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.0.18.tgz",
- "integrity": "sha512-msMRKLMVLWygpK3u2Hybgi4MNjcYJvwTb0Ru09+fOyCXIgT5raYP041DRRdiJiI3k/2U6SEbAETB3YtBrUkCFA==",
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.5.tgz",
+ "integrity": "sha512-76wdkrmfXfqGjueGgnb45ITPyUi1ycZ4IHgC2bhPDUfWHklY/q3MdLOAB+TF1e6xfl8NxNY0ZYaPCFNWSsw3Ug==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@vitest/pretty-format": "4.0.18",
- "tinyrainbow": "^3.0.3"
+ "@vitest/pretty-format": "4.1.5",
+ "convert-source-map": "^2.0.0",
+ "tinyrainbow": "^3.1.0"
},
"funding": {
"url": "https://opencollective.com/vitest"
@@ -4569,6 +4365,7 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true,
"license": "Python-2.0"
},
"node_modules/aria-query": {
@@ -4726,13 +4523,13 @@
"license": "MIT"
},
"node_modules/asn1js": {
- "version": "3.0.7",
- "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-3.0.7.tgz",
- "integrity": "sha512-uLvq6KJu04qoQM6gvBfKFjlh6Gl0vOKQuR5cJMDHQkmwfMOQeN3F3SHCv9SNYSL+CRoHvOGFfllDlVz03GQjvQ==",
+ "version": "3.0.10",
+ "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-3.0.10.tgz",
+ "integrity": "sha512-S2s3aOytiKdFRdulw2qPE51MzjzVOisppcVv7jVFR+Kw0kxwvFrDcYA0h7Ndqbmj0HkMIXYWaoj7fli8kgx1eg==",
"license": "BSD-3-Clause",
"dependencies": {
"pvtsutils": "^1.3.6",
- "pvutils": "^1.1.3",
+ "pvutils": "^1.1.5",
"tslib": "^2.8.1"
},
"engines": {
@@ -4811,9 +4608,9 @@
"license": "MIT"
},
"node_modules/brace-expansion": {
- "version": "5.0.4",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.4.tgz",
- "integrity": "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==",
+ "version": "5.0.5",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz",
+ "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -5073,12 +4870,6 @@
"integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
"license": "MIT"
},
- "node_modules/crelt": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.6.tgz",
- "integrity": "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==",
- "license": "MIT"
- },
"node_modules/cross-spawn": {
"version": "7.0.6",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
@@ -5256,6 +5047,7 @@
"version": "10.6.0",
"resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz",
"integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==",
+ "dev": true,
"license": "MIT"
},
"node_modules/deep-is": {
@@ -5357,9 +5149,9 @@
"license": "MIT"
},
"node_modules/dompurify": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.3.3.tgz",
- "integrity": "sha512-Oj6pzI2+RqBfFG+qOaOLbFXLQ90ARpcGG6UePL82bJLtdsa6CYJD7nmiU8MW9nQNOtCHV3lZ/Bzq1X0QYbBZCA==",
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.4.1.tgz",
+ "integrity": "sha512-JahakDAIg1gyOm7dlgWSDjV4n7Ip2PKR55NIT6jrMfIgLFgWo81vdr1/QGqWtFNRqXP9UV71oVePtjqS2ebnPw==",
"license": "(MPL-2.0 OR Apache-2.0)",
"optionalDependencies": {
"@types/trusted-types": "^2.0.7"
@@ -5409,9 +5201,9 @@
"license": "MIT"
},
"node_modules/enhanced-resolve": {
- "version": "5.20.0",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.20.0.tgz",
- "integrity": "sha512-/ce7+jQ1PQ6rVXwe+jKEg5hW5ciicHwIQUagZkp6IufBoY3YDgdTTY1azVs0qoRgVmvsNB+rbjLJxDAeHHtwsQ==",
+ "version": "5.20.1",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.20.1.tgz",
+ "integrity": "sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -5553,9 +5345,9 @@
}
},
"node_modules/es-module-lexer": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz",
- "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.0.0.tgz",
+ "integrity": "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==",
"dev": true,
"license": "MIT"
},
@@ -5626,6 +5418,8 @@
"dev": true,
"hasInstallScript": true,
"license": "MIT",
+ "optional": true,
+ "peer": true,
"bin": {
"esbuild": "bin/esbuild"
},
@@ -5675,6 +5469,7 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
"integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">=10"
@@ -5684,25 +5479,25 @@
}
},
"node_modules/eslint": {
- "version": "9.39.3",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.3.tgz",
- "integrity": "sha512-VmQ+sifHUbI/IcSopBCF/HO3YiHQx/AVd3UVyYL6weuwW+HvON9VYn5l6Zl1WZzPWXPNZrSQpxwkkZ/VuvJZzg==",
+ "version": "9.39.4",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.4.tgz",
+ "integrity": "sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/eslint-utils": "^4.8.0",
"@eslint-community/regexpp": "^4.12.1",
- "@eslint/config-array": "^0.21.1",
+ "@eslint/config-array": "^0.21.2",
"@eslint/config-helpers": "^0.4.2",
"@eslint/core": "^0.17.0",
- "@eslint/eslintrc": "^3.3.1",
- "@eslint/js": "9.39.3",
+ "@eslint/eslintrc": "^3.3.5",
+ "@eslint/js": "9.39.4",
"@eslint/plugin-kit": "^0.4.1",
"@humanfs/node": "^0.16.6",
"@humanwhocodes/module-importer": "^1.0.1",
"@humanwhocodes/retry": "^0.4.2",
"@types/estree": "^1.0.6",
- "ajv": "^6.12.4",
+ "ajv": "^6.14.0",
"chalk": "^4.0.0",
"cross-spawn": "^7.0.6",
"debug": "^4.3.2",
@@ -5721,7 +5516,7 @@
"is-glob": "^4.0.0",
"json-stable-stringify-without-jsonify": "^1.0.1",
"lodash.merge": "^4.6.2",
- "minimatch": "^3.1.2",
+ "minimatch": "^3.1.5",
"natural-compare": "^1.4.0",
"optionator": "^0.9.3"
},
@@ -5777,9 +5572,9 @@
}
},
"node_modules/eslint-plugin-react-hooks": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-7.0.1.tgz",
- "integrity": "sha512-O0d0m04evaNzEPoSW+59Mezf8Qt0InfgGIBJnpC0h3NH/WjUAR7BIKUfysC6todmtiZ/A0oUVS8Gce0WhBrHsA==",
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-7.1.1.tgz",
+ "integrity": "sha512-f2I7Gw6JbvCexzIInuSbZpfdQ44D7iqdWX01FKLvrPgqxoE7oMj8clOfto8U6vYiz4yd5oKu39rRSVOe1zRu0g==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -5793,7 +5588,7 @@
"node": ">=18"
},
"peerDependencies": {
- "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0"
+ "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 || ^10.0.0"
}
},
"node_modules/eslint-plugin-react/node_modules/brace-expansion": {
@@ -6298,9 +6093,9 @@
}
},
"node_modules/globals": {
- "version": "17.4.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-17.4.0.tgz",
- "integrity": "sha512-hjrNztw/VajQwOLsMNT1cbJiH2muO3OROCHnbehc8eY5JyD2gqz4AcMHPqgaOR59DjgUjYAYLeH699g/eWi2jw==",
+ "version": "17.5.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-17.5.0.tgz",
+ "integrity": "sha512-qoV+HK2yFl/366t2/Cb3+xxPUo5BuMynomoDmiaZBIdbs+0pYbjfZU+twLhGKp4uCZ/+NbtpVepH5bGCxRyy2g==",
"dev": true,
"license": "MIT",
"engines": {
@@ -6537,9 +6332,9 @@
}
},
"node_modules/icu-minify": {
- "version": "4.8.3",
- "resolved": "https://registry.npmjs.org/icu-minify/-/icu-minify-4.8.3.tgz",
- "integrity": "sha512-65Av7FLosNk7bPbmQx5z5XG2Y3T2GFppcjiXh4z1idHeVgQxlDpAmkGoYI0eFzAvrOnjpWTL5FmPDhsdfRMPEA==",
+ "version": "4.9.1",
+ "resolved": "https://registry.npmjs.org/icu-minify/-/icu-minify-4.9.1.tgz",
+ "integrity": "sha512-6NkfF9GHHFouqnz+wuiLjCWQiyxoEyJ5liUv4Jxxo/8wyhV7MY0L0iTEGDAVEa4aAD58WqTxFMa20S5nyMjwNw==",
"funding": [
{
"type": "individual",
@@ -6626,15 +6421,13 @@
}
},
"node_modules/intl-messageformat": {
- "version": "11.1.2",
- "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-11.1.2.tgz",
- "integrity": "sha512-ucSrQmZGAxfiBHfBRXW/k7UC8MaGFlEj4Ry1tKiDcmgwQm1y3EDl40u+4VNHYomxJQMJi9NEI3riDRlth96jKg==",
+ "version": "11.2.1",
+ "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-11.2.1.tgz",
+ "integrity": "sha512-1gAVEUt3wEPvTqML4Fsw9klZV5j0vszQxayP/fi6gUroAc8AUHiNaisBKLWxybL1AdWq1mP07YV1q8v4N92ilQ==",
"license": "BSD-3-Clause",
"dependencies": {
- "@formatjs/ecma402-abstract": "3.1.1",
- "@formatjs/fast-memoize": "3.1.0",
- "@formatjs/icu-messageformat-parser": "3.5.1",
- "tslib": "^2.8.1"
+ "@formatjs/fast-memoize": "3.1.2",
+ "@formatjs/icu-messageformat-parser": "3.5.4"
}
},
"node_modules/is-array-buffer": {
@@ -7245,9 +7038,9 @@
}
},
"node_modules/lightningcss": {
- "version": "1.31.1",
- "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.31.1.tgz",
- "integrity": "sha512-l51N2r93WmGUye3WuFoN5k10zyvrVs0qfKBhyC5ogUQ6Ew6JUSswh78mbSO+IU3nTWsyOArqPCcShdQSadghBQ==",
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz",
+ "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==",
"dev": true,
"license": "MPL-2.0",
"dependencies": {
@@ -7261,23 +7054,23 @@
"url": "https://opencollective.com/parcel"
},
"optionalDependencies": {
- "lightningcss-android-arm64": "1.31.1",
- "lightningcss-darwin-arm64": "1.31.1",
- "lightningcss-darwin-x64": "1.31.1",
- "lightningcss-freebsd-x64": "1.31.1",
- "lightningcss-linux-arm-gnueabihf": "1.31.1",
- "lightningcss-linux-arm64-gnu": "1.31.1",
- "lightningcss-linux-arm64-musl": "1.31.1",
- "lightningcss-linux-x64-gnu": "1.31.1",
- "lightningcss-linux-x64-musl": "1.31.1",
- "lightningcss-win32-arm64-msvc": "1.31.1",
- "lightningcss-win32-x64-msvc": "1.31.1"
+ "lightningcss-android-arm64": "1.32.0",
+ "lightningcss-darwin-arm64": "1.32.0",
+ "lightningcss-darwin-x64": "1.32.0",
+ "lightningcss-freebsd-x64": "1.32.0",
+ "lightningcss-linux-arm-gnueabihf": "1.32.0",
+ "lightningcss-linux-arm64-gnu": "1.32.0",
+ "lightningcss-linux-arm64-musl": "1.32.0",
+ "lightningcss-linux-x64-gnu": "1.32.0",
+ "lightningcss-linux-x64-musl": "1.32.0",
+ "lightningcss-win32-arm64-msvc": "1.32.0",
+ "lightningcss-win32-x64-msvc": "1.32.0"
}
},
"node_modules/lightningcss-android-arm64": {
- "version": "1.31.1",
- "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.31.1.tgz",
- "integrity": "sha512-HXJF3x8w9nQ4jbXRiNppBCqeZPIAfUo8zE/kOEGbW5NZvGc/K7nMxbhIr+YlFlHW5mpbg/YFPdbnCh1wAXCKFg==",
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz",
+ "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==",
"cpu": [
"arm64"
],
@@ -7296,9 +7089,9 @@
}
},
"node_modules/lightningcss-darwin-arm64": {
- "version": "1.31.1",
- "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.31.1.tgz",
- "integrity": "sha512-02uTEqf3vIfNMq3h/z2cJfcOXnQ0GRwQrkmPafhueLb2h7mqEidiCzkE4gBMEH65abHRiQvhdcQ+aP0D0g67sg==",
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz",
+ "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==",
"cpu": [
"arm64"
],
@@ -7317,9 +7110,9 @@
}
},
"node_modules/lightningcss-darwin-x64": {
- "version": "1.31.1",
- "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.31.1.tgz",
- "integrity": "sha512-1ObhyoCY+tGxtsz1lSx5NXCj3nirk0Y0kB/g8B8DT+sSx4G9djitg9ejFnjb3gJNWo7qXH4DIy2SUHvpoFwfTA==",
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz",
+ "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==",
"cpu": [
"x64"
],
@@ -7338,9 +7131,9 @@
}
},
"node_modules/lightningcss-freebsd-x64": {
- "version": "1.31.1",
- "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.31.1.tgz",
- "integrity": "sha512-1RINmQKAItO6ISxYgPwszQE1BrsVU5aB45ho6O42mu96UiZBxEXsuQ7cJW4zs4CEodPUioj/QrXW1r9pLUM74A==",
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz",
+ "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==",
"cpu": [
"x64"
],
@@ -7359,9 +7152,9 @@
}
},
"node_modules/lightningcss-linux-arm-gnueabihf": {
- "version": "1.31.1",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.31.1.tgz",
- "integrity": "sha512-OOCm2//MZJ87CdDK62rZIu+aw9gBv4azMJuA8/KB74wmfS3lnC4yoPHm0uXZ/dvNNHmnZnB8XLAZzObeG0nS1g==",
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz",
+ "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==",
"cpu": [
"arm"
],
@@ -7380,9 +7173,9 @@
}
},
"node_modules/lightningcss-linux-arm64-gnu": {
- "version": "1.31.1",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.31.1.tgz",
- "integrity": "sha512-WKyLWztD71rTnou4xAD5kQT+982wvca7E6QoLpoawZ1gP9JM0GJj4Tp5jMUh9B3AitHbRZ2/H3W5xQmdEOUlLg==",
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz",
+ "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==",
"cpu": [
"arm64"
],
@@ -7401,9 +7194,9 @@
}
},
"node_modules/lightningcss-linux-arm64-musl": {
- "version": "1.31.1",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.31.1.tgz",
- "integrity": "sha512-mVZ7Pg2zIbe3XlNbZJdjs86YViQFoJSpc41CbVmKBPiGmC4YrfeOyz65ms2qpAobVd7WQsbW4PdsSJEMymyIMg==",
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz",
+ "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==",
"cpu": [
"arm64"
],
@@ -7422,9 +7215,9 @@
}
},
"node_modules/lightningcss-linux-x64-gnu": {
- "version": "1.31.1",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.31.1.tgz",
- "integrity": "sha512-xGlFWRMl+0KvUhgySdIaReQdB4FNudfUTARn7q0hh/V67PVGCs3ADFjw+6++kG1RNd0zdGRlEKa+T13/tQjPMA==",
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz",
+ "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==",
"cpu": [
"x64"
],
@@ -7443,9 +7236,9 @@
}
},
"node_modules/lightningcss-linux-x64-musl": {
- "version": "1.31.1",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.31.1.tgz",
- "integrity": "sha512-eowF8PrKHw9LpoZii5tdZwnBcYDxRw2rRCyvAXLi34iyeYfqCQNA9rmUM0ce62NlPhCvof1+9ivRaTY6pSKDaA==",
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz",
+ "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==",
"cpu": [
"x64"
],
@@ -7464,9 +7257,9 @@
}
},
"node_modules/lightningcss-win32-arm64-msvc": {
- "version": "1.31.1",
- "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.31.1.tgz",
- "integrity": "sha512-aJReEbSEQzx1uBlQizAOBSjcmr9dCdL3XuC/6HLXAxmtErsj2ICo5yYggg1qOODQMtnjNQv2UHb9NpOuFtYe4w==",
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz",
+ "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==",
"cpu": [
"arm64"
],
@@ -7485,9 +7278,9 @@
}
},
"node_modules/lightningcss-win32-x64-msvc": {
- "version": "1.31.1",
- "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.31.1.tgz",
- "integrity": "sha512-I9aiFrbd7oYHwlnQDqr1Roz+fTz61oDDJX7n9tYF9FJymH1cIN1DtKw3iYt6b8WZgEjoNwVSncwF4wx/ZedMhw==",
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz",
+ "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==",
"cpu": [
"x64"
],
@@ -7505,15 +7298,6 @@
"url": "https://opencollective.com/parcel"
}
},
- "node_modules/linkify-it": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz",
- "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==",
- "license": "MIT",
- "dependencies": {
- "uc.micro": "^2.0.0"
- }
- },
"node_modules/linkifyjs": {
"version": "4.3.2",
"resolved": "https://registry.npmjs.org/linkifyjs/-/linkifyjs-4.3.2.tgz",
@@ -7567,9 +7351,9 @@
}
},
"node_modules/lucide-react": {
- "version": "0.575.0",
- "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.575.0.tgz",
- "integrity": "sha512-VuXgKZrk0uiDlWjGGXmKV6MSk9Yy4l10qgVvzGn2AWBx1Ylt0iBexKOAoA6I7JO3m+M9oeovJd3yYENfkUbOeg==",
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-1.8.0.tgz",
+ "integrity": "sha512-WuvlsjngSk7TnTBJ1hsCy3ql9V9VOdcPkd3PKcSmM34vJD8KG6molxz7m7zbYFgICwsanQWmJ13JlYs4Zp7Arw==",
"license": "ISC",
"peerDependencies": {
"react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0"
@@ -7595,35 +7379,6 @@
"@jridgewell/sourcemap-codec": "^1.5.5"
}
},
- "node_modules/markdown-it": {
- "version": "14.1.1",
- "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.1.tgz",
- "integrity": "sha512-BuU2qnTti9YKgK5N+IeMubp14ZUKUUw7yeJbkjtosvHiP0AZ5c8IAgEMk79D0eC8F23r4Ac/q8cAIFdm2FtyoA==",
- "license": "MIT",
- "dependencies": {
- "argparse": "^2.0.1",
- "entities": "^4.4.0",
- "linkify-it": "^5.0.0",
- "mdurl": "^2.0.0",
- "punycode.js": "^2.3.1",
- "uc.micro": "^2.1.0"
- },
- "bin": {
- "markdown-it": "bin/markdown-it.mjs"
- }
- },
- "node_modules/markdown-it/node_modules/entities": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
- "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
- "license": "BSD-2-Clause",
- "engines": {
- "node": ">=0.12"
- },
- "funding": {
- "url": "https://github.com/fb55/entities?sponsor=1"
- }
- },
"node_modules/math-intrinsics": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
@@ -7641,12 +7396,6 @@
"dev": true,
"license": "CC0-1.0"
},
- "node_modules/mdurl": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz",
- "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==",
- "license": "MIT"
- },
"node_modules/min-indent": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz",
@@ -7670,13 +7419,13 @@
"license": "MIT"
},
"node_modules/minimatch": {
- "version": "10.2.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz",
- "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==",
+ "version": "10.2.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz",
+ "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==",
"dev": true,
"license": "BlueOak-1.0.0",
"dependencies": {
- "brace-expansion": "^5.0.2"
+ "brace-expansion": "^5.0.5"
},
"engines": {
"node": "18 || 20 || >=22"
@@ -7737,14 +7486,14 @@
}
},
"node_modules/next": {
- "version": "16.1.6",
- "resolved": "https://registry.npmjs.org/next/-/next-16.1.6.tgz",
- "integrity": "sha512-hkyRkcu5x/41KoqnROkfTm2pZVbKxvbZRuNvKXLRXxs3VfyO0WhY50TQS40EuKO9SW3rBj/sF3WbVwDACeMZyw==",
+ "version": "16.2.4",
+ "resolved": "https://registry.npmjs.org/next/-/next-16.2.4.tgz",
+ "integrity": "sha512-kPvz56wF5frc+FxlHI5qnklCzbq53HTwORaWBGdT0vNoKh1Aya9XC8aPauH4NJxqtzbWsS5mAbctm4cr+EkQ2Q==",
"license": "MIT",
"dependencies": {
- "@next/env": "16.1.6",
+ "@next/env": "16.2.4",
"@swc/helpers": "0.5.15",
- "baseline-browser-mapping": "^2.8.3",
+ "baseline-browser-mapping": "^2.9.19",
"caniuse-lite": "^1.0.30001579",
"postcss": "8.4.31",
"styled-jsx": "5.1.6"
@@ -7756,15 +7505,15 @@
"node": ">=20.9.0"
},
"optionalDependencies": {
- "@next/swc-darwin-arm64": "16.1.6",
- "@next/swc-darwin-x64": "16.1.6",
- "@next/swc-linux-arm64-gnu": "16.1.6",
- "@next/swc-linux-arm64-musl": "16.1.6",
- "@next/swc-linux-x64-gnu": "16.1.6",
- "@next/swc-linux-x64-musl": "16.1.6",
- "@next/swc-win32-arm64-msvc": "16.1.6",
- "@next/swc-win32-x64-msvc": "16.1.6",
- "sharp": "^0.34.4"
+ "@next/swc-darwin-arm64": "16.2.4",
+ "@next/swc-darwin-x64": "16.2.4",
+ "@next/swc-linux-arm64-gnu": "16.2.4",
+ "@next/swc-linux-arm64-musl": "16.2.4",
+ "@next/swc-linux-x64-gnu": "16.2.4",
+ "@next/swc-linux-x64-musl": "16.2.4",
+ "@next/swc-win32-arm64-msvc": "16.2.4",
+ "@next/swc-win32-x64-msvc": "16.2.4",
+ "sharp": "^0.34.5"
},
"peerDependencies": {
"@opentelemetry/api": "^1.1.0",
@@ -7790,9 +7539,9 @@
}
},
"node_modules/next-intl": {
- "version": "4.8.3",
- "resolved": "https://registry.npmjs.org/next-intl/-/next-intl-4.8.3.tgz",
- "integrity": "sha512-PvdBDWg+Leh7BR7GJUQbCDVVaBRn37GwDBWc9sv0rVQOJDQ5JU1rVzx9EEGuOGYo0DHAl70++9LQ7HxTawdL7w==",
+ "version": "4.9.1",
+ "resolved": "https://registry.npmjs.org/next-intl/-/next-intl-4.9.1.tgz",
+ "integrity": "sha512-N7ga0CjtYcdxNvaKNIi6eJ2mmatlHK5hp8rt0YO2Omoc1m0gean242/Ukdj6+gJNiReBVcYIjK0HZeNx7CV1ug==",
"funding": [
{
"type": "individual",
@@ -7804,16 +7553,15 @@
"@formatjs/intl-localematcher": "^0.8.1",
"@parcel/watcher": "^2.4.1",
"@swc/core": "^1.15.2",
- "icu-minify": "^4.8.3",
+ "icu-minify": "^4.9.1",
"negotiator": "^1.0.0",
- "next-intl-swc-plugin-extractor": "^4.8.3",
+ "next-intl-swc-plugin-extractor": "^4.9.1",
"po-parser": "^2.1.1",
- "use-intl": "^4.8.3"
+ "use-intl": "^4.9.1"
},
"peerDependencies": {
"next": "^12.0.0 || ^13.0.0 || ^14.0.0 || ^15.0.0 || ^16.0.0",
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0 || ^19.0.0",
- "typescript": "^5.0.0"
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0 || ^19.0.0"
},
"peerDependenciesMeta": {
"typescript": {
@@ -7822,9 +7570,9 @@
}
},
"node_modules/next-intl-swc-plugin-extractor": {
- "version": "4.8.3",
- "resolved": "https://registry.npmjs.org/next-intl-swc-plugin-extractor/-/next-intl-swc-plugin-extractor-4.8.3.tgz",
- "integrity": "sha512-YcaT+R9z69XkGhpDarVFWUprrCMbxgIQYPUaXoE6LGVnLjGdo8hu3gL6bramDVjNKViYY8a/pXPy7Bna0mXORg==",
+ "version": "4.9.1",
+ "resolved": "https://registry.npmjs.org/next-intl-swc-plugin-extractor/-/next-intl-swc-plugin-extractor-4.9.1.tgz",
+ "integrity": "sha512-8whJJ6oxJz8JqkHarggmmuEDyXgC7nEnaPhZD91CJwEWW4xp0AST3Mw17YxvHyP2vAF3taWfFbs1maD+WWtz3w==",
"license": "MIT"
},
"node_modules/next-intl/node_modules/@swc/core": {
@@ -8244,9 +7992,9 @@
}
},
"node_modules/pkijs": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/pkijs/-/pkijs-3.3.3.tgz",
- "integrity": "sha512-+KD8hJtqQMYoTuL1bbGOqxb4z+nZkTAwVdNtWwe8Tc2xNbEmdJYIYoc6Qt0uF55e6YW6KuTHw1DjQ18gMhzepw==",
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/pkijs/-/pkijs-3.4.0.tgz",
+ "integrity": "sha512-emEcLuomt2j03vxD54giVB4SxTjnsqkU692xZOZXHDVoYyypEm+b3jpiTcc+Cf+myooc+/Ly0z01jqeNHVgJGw==",
"license": "BSD-3-Clause",
"dependencies": {
"@noble/hashes": "1.4.0",
@@ -8273,13 +8021,13 @@
}
},
"node_modules/playwright": {
- "version": "1.58.2",
- "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.58.2.tgz",
- "integrity": "sha512-vA30H8Nvkq/cPBnNw4Q8TWz1EJyqgpuinBcHET0YVJVFldr8JDNiU9LaWAE1KqSkRYazuaBhTpB5ZzShOezQ6A==",
+ "version": "1.59.1",
+ "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.59.1.tgz",
+ "integrity": "sha512-C8oWjPR3F81yljW9o5OxcWzfh6avkVwDD2VYdwIGqTkl+OGFISgypqzfu7dOe4QNLL2aqcWBmI3PMtLIK233lw==",
"devOptional": true,
"license": "Apache-2.0",
"dependencies": {
- "playwright-core": "1.58.2"
+ "playwright-core": "1.59.1"
},
"bin": {
"playwright": "cli.js"
@@ -8292,9 +8040,9 @@
}
},
"node_modules/playwright-core": {
- "version": "1.58.2",
- "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.58.2.tgz",
- "integrity": "sha512-yZkEtftgwS8CsfYo7nm0KE8jsvm6i/PTgVtB8DL726wNf6H2IMsDuxCpJj59KDaxCtSnrWan2AeDqM7JBaultg==",
+ "version": "1.59.1",
+ "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.59.1.tgz",
+ "integrity": "sha512-HBV/RJg81z5BiiZ9yPzIiClYV/QMsDCKUyogwH9p3MCP6IYjUFu/MActgYAvK0oWyV9NlwM3GLBjADyWgydVyg==",
"devOptional": true,
"license": "Apache-2.0",
"bin": {
@@ -8336,9 +8084,9 @@
"license": "MIT-0"
},
"node_modules/postcss": {
- "version": "8.5.6",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
- "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
+ "version": "8.5.10",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.10.tgz",
+ "integrity": "sha512-pMMHxBOZKFU6HgAZ4eyGnwXF/EvPGGqUr0MnZ5+99485wwW41kW91A4LOGxSHhgugZmSChL5AlElNdwlNgcnLQ==",
"dev": true,
"funding": [
{
@@ -8436,15 +8184,6 @@
"prosemirror-transform": "^1.0.0"
}
},
- "node_modules/prosemirror-collab": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/prosemirror-collab/-/prosemirror-collab-1.3.1.tgz",
- "integrity": "sha512-4SnynYR9TTYaQVXd/ieUvsVV4PDMBzrq2xPUWutHivDuOshZXqQ5rGbZM84HEaXKbLdItse7weMGOUdDVcLKEQ==",
- "license": "MIT",
- "dependencies": {
- "prosemirror-state": "^1.0.0"
- }
- },
"node_modules/prosemirror-commands": {
"version": "1.7.1",
"resolved": "https://registry.npmjs.org/prosemirror-commands/-/prosemirror-commands-1.7.1.tgz",
@@ -8491,16 +8230,6 @@
"rope-sequence": "^1.3.0"
}
},
- "node_modules/prosemirror-inputrules": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/prosemirror-inputrules/-/prosemirror-inputrules-1.5.1.tgz",
- "integrity": "sha512-7wj4uMjKaXWAQ1CDgxNzNtR9AlsuwzHfdFH1ygEHA2KHF2DOEaXl1CJfNPAKCg9qNEh4rum975QLaCiQPyY6Fw==",
- "license": "MIT",
- "dependencies": {
- "prosemirror-state": "^1.0.0",
- "prosemirror-transform": "^1.0.0"
- }
- },
"node_modules/prosemirror-keymap": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/prosemirror-keymap/-/prosemirror-keymap-1.2.3.tgz",
@@ -8511,29 +8240,6 @@
"w3c-keyname": "^2.2.0"
}
},
- "node_modules/prosemirror-markdown": {
- "version": "1.13.4",
- "resolved": "https://registry.npmjs.org/prosemirror-markdown/-/prosemirror-markdown-1.13.4.tgz",
- "integrity": "sha512-D98dm4cQ3Hs6EmjK500TdAOew4Z03EV71ajEFiWra3Upr7diytJsjF4mPV2dW+eK5uNectiRj0xFxYI9NLXDbw==",
- "license": "MIT",
- "dependencies": {
- "@types/markdown-it": "^14.0.0",
- "markdown-it": "^14.0.0",
- "prosemirror-model": "^1.25.0"
- }
- },
- "node_modules/prosemirror-menu": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/prosemirror-menu/-/prosemirror-menu-1.3.0.tgz",
- "integrity": "sha512-TImyPXCHPcDsSka2/lwJ6WjTASr4re/qWq1yoTTuLOqfXucwF6VcRa2LWCkM/EyTD1UO3CUwiH8qURJoWJRxwg==",
- "license": "MIT",
- "dependencies": {
- "crelt": "^1.0.0",
- "prosemirror-commands": "^1.0.0",
- "prosemirror-history": "^1.0.0",
- "prosemirror-state": "^1.0.0"
- }
- },
"node_modules/prosemirror-model": {
"version": "1.25.4",
"resolved": "https://registry.npmjs.org/prosemirror-model/-/prosemirror-model-1.25.4.tgz",
@@ -8543,15 +8249,6 @@
"orderedmap": "^2.0.0"
}
},
- "node_modules/prosemirror-schema-basic": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/prosemirror-schema-basic/-/prosemirror-schema-basic-1.2.4.tgz",
- "integrity": "sha512-ELxP4TlX3yr2v5rM7Sb70SqStq5NvI15c0j9j/gjsrO5vaw+fnnpovCLEGIcpeGfifkuqJwl4fon6b+KdrODYQ==",
- "license": "MIT",
- "dependencies": {
- "prosemirror-model": "^1.25.0"
- }
- },
"node_modules/prosemirror-schema-list": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/prosemirror-schema-list/-/prosemirror-schema-list-1.5.1.tgz",
@@ -8587,21 +8284,6 @@
"prosemirror-view": "^1.41.4"
}
},
- "node_modules/prosemirror-trailing-node": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/prosemirror-trailing-node/-/prosemirror-trailing-node-3.0.0.tgz",
- "integrity": "sha512-xiun5/3q0w5eRnGYfNlW1uU9W6x5MoFKWwq/0TIRgt09lv7Hcser2QYV8t4muXbEr+Fwo0geYn79Xs4GKywrRQ==",
- "license": "MIT",
- "dependencies": {
- "@remirror/core-constants": "3.0.0",
- "escape-string-regexp": "^4.0.0"
- },
- "peerDependencies": {
- "prosemirror-model": "^1.22.1",
- "prosemirror-state": "^1.4.2",
- "prosemirror-view": "^1.33.8"
- }
- },
"node_modules/prosemirror-transform": {
"version": "1.11.0",
"resolved": "https://registry.npmjs.org/prosemirror-transform/-/prosemirror-transform-1.11.0.tgz",
@@ -8632,15 +8314,6 @@
"node": ">=6"
}
},
- "node_modules/punycode.js": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz",
- "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==",
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/pvtsutils": {
"version": "1.3.6",
"resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.3.6.tgz",
@@ -8677,24 +8350,24 @@
}
},
"node_modules/react": {
- "version": "19.2.4",
- "resolved": "https://registry.npmjs.org/react/-/react-19.2.4.tgz",
- "integrity": "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==",
+ "version": "19.2.5",
+ "resolved": "https://registry.npmjs.org/react/-/react-19.2.5.tgz",
+ "integrity": "sha512-llUJLzz1zTUBrskt2pwZgLq59AemifIftw4aB7JxOqf1HY2FDaGDxgwpAPVzHU1kdWabH7FauP4i1oEeer2WCA==",
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/react-dom": {
- "version": "19.2.4",
- "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.4.tgz",
- "integrity": "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==",
+ "version": "19.2.5",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.5.tgz",
+ "integrity": "sha512-J5bAZz+DXMMwW/wV3xzKke59Af6CHY7G4uYLN1OvBcKEsWOs4pQExj86BBKamxl/Ik5bx9whOrvBlSDfWzgSag==",
"license": "MIT",
"dependencies": {
"scheduler": "^0.27.0"
},
"peerDependencies": {
- "react": "^19.2.4"
+ "react": "^19.2.5"
}
},
"node_modules/react-is": {
@@ -8704,16 +8377,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/react-refresh": {
- "version": "0.18.0",
- "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.18.0.tgz",
- "integrity": "sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/readable-stream": {
"version": "2.3.8",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
@@ -8828,51 +8491,47 @@
"node": ">=4"
}
},
- "node_modules/rollup": {
- "version": "4.59.0",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.59.0.tgz",
- "integrity": "sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==",
+ "node_modules/rolldown": {
+ "version": "1.0.0-rc.16",
+ "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.0-rc.16.tgz",
+ "integrity": "sha512-rzi5WqKzEZw3SooTt7cgm4eqIoujPIyGcJNGFL7iPEuajQw7vxMHUkXylu4/vhCkJGXsgRmxqMKXUpT6FEgl0g==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@types/estree": "1.0.8"
+ "@oxc-project/types": "=0.126.0",
+ "@rolldown/pluginutils": "1.0.0-rc.16"
},
"bin": {
- "rollup": "dist/bin/rollup"
+ "rolldown": "bin/cli.mjs"
},
"engines": {
- "node": ">=18.0.0",
- "npm": ">=8.0.0"
+ "node": "^20.19.0 || >=22.12.0"
},
"optionalDependencies": {
- "@rollup/rollup-android-arm-eabi": "4.59.0",
- "@rollup/rollup-android-arm64": "4.59.0",
- "@rollup/rollup-darwin-arm64": "4.59.0",
- "@rollup/rollup-darwin-x64": "4.59.0",
- "@rollup/rollup-freebsd-arm64": "4.59.0",
- "@rollup/rollup-freebsd-x64": "4.59.0",
- "@rollup/rollup-linux-arm-gnueabihf": "4.59.0",
- "@rollup/rollup-linux-arm-musleabihf": "4.59.0",
- "@rollup/rollup-linux-arm64-gnu": "4.59.0",
- "@rollup/rollup-linux-arm64-musl": "4.59.0",
- "@rollup/rollup-linux-loong64-gnu": "4.59.0",
- "@rollup/rollup-linux-loong64-musl": "4.59.0",
- "@rollup/rollup-linux-ppc64-gnu": "4.59.0",
- "@rollup/rollup-linux-ppc64-musl": "4.59.0",
- "@rollup/rollup-linux-riscv64-gnu": "4.59.0",
- "@rollup/rollup-linux-riscv64-musl": "4.59.0",
- "@rollup/rollup-linux-s390x-gnu": "4.59.0",
- "@rollup/rollup-linux-x64-gnu": "4.59.0",
- "@rollup/rollup-linux-x64-musl": "4.59.0",
- "@rollup/rollup-openbsd-x64": "4.59.0",
- "@rollup/rollup-openharmony-arm64": "4.59.0",
- "@rollup/rollup-win32-arm64-msvc": "4.59.0",
- "@rollup/rollup-win32-ia32-msvc": "4.59.0",
- "@rollup/rollup-win32-x64-gnu": "4.59.0",
- "@rollup/rollup-win32-x64-msvc": "4.59.0",
- "fsevents": "~2.3.2"
+ "@rolldown/binding-android-arm64": "1.0.0-rc.16",
+ "@rolldown/binding-darwin-arm64": "1.0.0-rc.16",
+ "@rolldown/binding-darwin-x64": "1.0.0-rc.16",
+ "@rolldown/binding-freebsd-x64": "1.0.0-rc.16",
+ "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-rc.16",
+ "@rolldown/binding-linux-arm64-gnu": "1.0.0-rc.16",
+ "@rolldown/binding-linux-arm64-musl": "1.0.0-rc.16",
+ "@rolldown/binding-linux-ppc64-gnu": "1.0.0-rc.16",
+ "@rolldown/binding-linux-s390x-gnu": "1.0.0-rc.16",
+ "@rolldown/binding-linux-x64-gnu": "1.0.0-rc.16",
+ "@rolldown/binding-linux-x64-musl": "1.0.0-rc.16",
+ "@rolldown/binding-openharmony-arm64": "1.0.0-rc.16",
+ "@rolldown/binding-wasm32-wasi": "1.0.0-rc.16",
+ "@rolldown/binding-win32-arm64-msvc": "1.0.0-rc.16",
+ "@rolldown/binding-win32-x64-msvc": "1.0.0-rc.16"
}
},
+ "node_modules/rolldown/node_modules/@rolldown/pluginutils": {
+ "version": "1.0.0-rc.16",
+ "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.16.tgz",
+ "integrity": "sha512-45+YtqxLYKDWQouLKCrpIZhke+nXxhsw+qAHVzHDVwttyBlHNBVs2K25rDXrZzhpTp9w1FlAlvweV1H++fdZoA==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/rope-sequence": {
"version": "1.3.4",
"resolved": "https://registry.npmjs.org/rope-sequence/-/rope-sequence-1.3.4.tgz",
@@ -9226,9 +8885,9 @@
"license": "MIT"
},
"node_modules/std-env": {
- "version": "3.10.0",
- "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz",
- "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/std-env/-/std-env-4.1.0.tgz",
+ "integrity": "sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ==",
"dev": true,
"license": "MIT"
},
@@ -9472,16 +9131,16 @@
}
},
"node_modules/tailwindcss": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.2.1.tgz",
- "integrity": "sha512-/tBrSQ36vCleJkAOsy9kbNTgaxvGbyOamC30PRePTQe/o1MFwEKHQk4Cn7BNGaPtjp+PuUrByJehM1hgxfq4sw==",
+ "version": "4.2.4",
+ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.2.4.tgz",
+ "integrity": "sha512-HhKppgO81FQof5m6TEnuBWCZGgfRAWbaeOaGT00KOy/Pf/j6oUihdvBpA7ltCeAvZpFhW3j0PTclkxsd4IXYDA==",
"dev": true,
"license": "MIT"
},
"node_modules/tapable": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz",
- "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==",
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.3.tgz",
+ "integrity": "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==",
"dev": true,
"license": "MIT",
"engines": {
@@ -9500,9 +9159,9 @@
"license": "MIT"
},
"node_modules/tinyexec": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.2.tgz",
- "integrity": "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.1.1.tgz",
+ "integrity": "sha512-VKS/ZaQhhkKFMANmAOhhXVoIfBXblQxGX1myCQ2faQrfmobMftXeJPcZGp0gS07ocvGJWDLZGyOZDadDBqYIJg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -9510,14 +9169,14 @@
}
},
"node_modules/tinyglobby": {
- "version": "0.2.15",
- "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz",
- "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==",
+ "version": "0.2.16",
+ "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.16.tgz",
+ "integrity": "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==",
"dev": true,
"license": "MIT",
"dependencies": {
"fdir": "^6.5.0",
- "picomatch": "^4.0.3"
+ "picomatch": "^4.0.4"
},
"engines": {
"node": ">=12.0.0"
@@ -9545,9 +9204,9 @@
}
},
"node_modules/tinyrainbow": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.0.3.tgz",
- "integrity": "sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.1.0.tgz",
+ "integrity": "sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==",
"dev": true,
"license": "MIT",
"engines": {
@@ -9611,9 +9270,9 @@
}
},
"node_modules/ts-api-utils": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.4.0.tgz",
- "integrity": "sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==",
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz",
+ "integrity": "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -9724,7 +9383,7 @@
"version": "5.9.3",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
"integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
- "devOptional": true,
+ "dev": true,
"license": "Apache-2.0",
"bin": {
"tsc": "bin/tsc",
@@ -9734,12 +9393,6 @@
"node": ">=14.17"
}
},
- "node_modules/uc.micro": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz",
- "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==",
- "license": "MIT"
- },
"node_modules/unbox-primitive": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz",
@@ -9770,9 +9423,9 @@
}
},
"node_modules/undici-types": {
- "version": "7.18.2",
- "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz",
- "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==",
+ "version": "7.19.2",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.19.2.tgz",
+ "integrity": "sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg==",
"dev": true,
"license": "MIT"
},
@@ -9818,9 +9471,9 @@
}
},
"node_modules/use-intl": {
- "version": "4.8.3",
- "resolved": "https://registry.npmjs.org/use-intl/-/use-intl-4.8.3.tgz",
- "integrity": "sha512-nLxlC/RH+le6g3amA508Itnn/00mE+J22ui21QhOWo5V9hCEC43+WtnRAITbJW0ztVZphev5X9gvOf2/Dk9PLA==",
+ "version": "4.9.1",
+ "resolved": "https://registry.npmjs.org/use-intl/-/use-intl-4.9.1.tgz",
+ "integrity": "sha512-iGVV/xFYlhe3btafRlL8RPLD2Jsuet4yqn9DR6LWWbMhULsJnXgLonDkzDmsAIBIwFtk02oJuX/Ox2vwHKF+UQ==",
"funding": [
{
"type": "individual",
@@ -9831,7 +9484,7 @@
"dependencies": {
"@formatjs/fast-memoize": "^3.1.0",
"@schummar/icu-type-parser": "1.21.5",
- "icu-minify": "^4.8.3",
+ "icu-minify": "^4.9.1",
"intl-messageformat": "^11.1.0"
},
"peerDependencies": {
@@ -9854,18 +9507,17 @@
"license": "MIT"
},
"node_modules/vite": {
- "version": "7.3.1",
- "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz",
- "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==",
+ "version": "8.0.9",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-8.0.9.tgz",
+ "integrity": "sha512-t7g7GVRpMXjNpa67HaVWI/8BWtdVIQPCL2WoozXXA7LBGEFK4AkkKkHx2hAQf5x1GZSlcmEDPkVLSGahxnEEZw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "esbuild": "^0.27.0",
- "fdir": "^6.5.0",
- "picomatch": "^4.0.3",
- "postcss": "^8.5.6",
- "rollup": "^4.43.0",
- "tinyglobby": "^0.2.15"
+ "lightningcss": "^1.32.0",
+ "picomatch": "^4.0.4",
+ "postcss": "^8.5.10",
+ "rolldown": "1.0.0-rc.16",
+ "tinyglobby": "^0.2.16"
},
"bin": {
"vite": "bin/vite.js"
@@ -9881,9 +9533,10 @@
},
"peerDependencies": {
"@types/node": "^20.19.0 || >=22.12.0",
+ "@vitejs/devtools": "^0.1.0",
+ "esbuild": "^0.27.0 || ^0.28.0",
"jiti": ">=1.21.0",
"less": "^4.0.0",
- "lightningcss": "^1.21.0",
"sass": "^1.70.0",
"sass-embedded": "^1.70.0",
"stylus": ">=0.54.8",
@@ -9896,15 +9549,18 @@
"@types/node": {
"optional": true
},
+ "@vitejs/devtools": {
+ "optional": true
+ },
+ "esbuild": {
+ "optional": true
+ },
"jiti": {
"optional": true
},
"less": {
"optional": true
},
- "lightningcss": {
- "optional": true
- },
"sass": {
"optional": true
},
@@ -9928,24 +9584,6 @@
}
}
},
- "node_modules/vite/node_modules/fdir": {
- "version": "6.5.0",
- "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
- "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12.0.0"
- },
- "peerDependencies": {
- "picomatch": "^3 || ^4"
- },
- "peerDependenciesMeta": {
- "picomatch": {
- "optional": true
- }
- }
- },
"node_modules/vite/node_modules/fsevents": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
@@ -9962,31 +9600,31 @@
}
},
"node_modules/vitest": {
- "version": "4.0.18",
- "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.0.18.tgz",
- "integrity": "sha512-hOQuK7h0FGKgBAas7v0mSAsnvrIgAvWmRFjmzpJ7SwFHH3g1k2u37JtYwOwmEKhK6ZO3v9ggDBBm0La1LCK4uQ==",
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.1.5.tgz",
+ "integrity": "sha512-9Xx1v3/ih3m9hN+SbfkUyy0JAs72ap3r7joc87XL6jwF0jGg6mFBvQ1SrwaX+h8BlkX6Hz9shdd1uo6AF+ZGpg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@vitest/expect": "4.0.18",
- "@vitest/mocker": "4.0.18",
- "@vitest/pretty-format": "4.0.18",
- "@vitest/runner": "4.0.18",
- "@vitest/snapshot": "4.0.18",
- "@vitest/spy": "4.0.18",
- "@vitest/utils": "4.0.18",
- "es-module-lexer": "^1.7.0",
- "expect-type": "^1.2.2",
+ "@vitest/expect": "4.1.5",
+ "@vitest/mocker": "4.1.5",
+ "@vitest/pretty-format": "4.1.5",
+ "@vitest/runner": "4.1.5",
+ "@vitest/snapshot": "4.1.5",
+ "@vitest/spy": "4.1.5",
+ "@vitest/utils": "4.1.5",
+ "es-module-lexer": "^2.0.0",
+ "expect-type": "^1.3.0",
"magic-string": "^0.30.21",
"obug": "^2.1.1",
"pathe": "^2.0.3",
"picomatch": "^4.0.3",
- "std-env": "^3.10.0",
+ "std-env": "^4.0.0-rc.1",
"tinybench": "^2.9.0",
"tinyexec": "^1.0.2",
"tinyglobby": "^0.2.15",
- "tinyrainbow": "^3.0.3",
- "vite": "^6.0.0 || ^7.0.0",
+ "tinyrainbow": "^3.1.0",
+ "vite": "^6.0.0 || ^7.0.0 || ^8.0.0",
"why-is-node-running": "^2.3.0"
},
"bin": {
@@ -10002,12 +9640,15 @@
"@edge-runtime/vm": "*",
"@opentelemetry/api": "^1.9.0",
"@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0",
- "@vitest/browser-playwright": "4.0.18",
- "@vitest/browser-preview": "4.0.18",
- "@vitest/browser-webdriverio": "4.0.18",
- "@vitest/ui": "4.0.18",
+ "@vitest/browser-playwright": "4.1.5",
+ "@vitest/browser-preview": "4.1.5",
+ "@vitest/browser-webdriverio": "4.1.5",
+ "@vitest/coverage-istanbul": "4.1.5",
+ "@vitest/coverage-v8": "4.1.5",
+ "@vitest/ui": "4.1.5",
"happy-dom": "*",
- "jsdom": "*"
+ "jsdom": "*",
+ "vite": "^6.0.0 || ^7.0.0 || ^8.0.0"
},
"peerDependenciesMeta": {
"@edge-runtime/vm": {
@@ -10028,6 +9669,12 @@
"@vitest/browser-webdriverio": {
"optional": true
},
+ "@vitest/coverage-istanbul": {
+ "optional": true
+ },
+ "@vitest/coverage-v8": {
+ "optional": true
+ },
"@vitest/ui": {
"optional": true
},
@@ -10036,6 +9683,9 @@
},
"jsdom": {
"optional": true
+ },
+ "vite": {
+ "optional": false
}
}
},
@@ -10431,9 +10081,9 @@
}
},
"node_modules/zustand": {
- "version": "5.0.11",
- "resolved": "https://registry.npmjs.org/zustand/-/zustand-5.0.11.tgz",
- "integrity": "sha512-fdZY+dk7zn/vbWNCYmzZULHRrss0jx5pPFiOuMZ/5HJN6Yv3u+1Wswy/4MpZEkEGhtNH+pwxZB8OKgUBPzYAGg==",
+ "version": "5.0.12",
+ "resolved": "https://registry.npmjs.org/zustand/-/zustand-5.0.12.tgz",
+ "integrity": "sha512-i77ae3aZq4dhMlRhJVCYgMLKuSiZAaUPAct2AksxQ+gOtimhGMdXljRT21P5BNpeT4kXlLIckvkPM029OljD7g==",
"license": "MIT",
"engines": {
"node": ">=12.20.0"
diff --git a/package.json b/package.json
index 8c2fb66d..21175fb1 100644
--- a/package.json
+++ b/package.json
@@ -32,62 +32,62 @@
"typecheck": "tsc --noEmit"
},
"dependencies": {
- "@tanstack/react-virtual": "^3.13.18",
- "@tiptap/extension-color": "^3.20.4",
- "@tiptap/extension-image": "^3.20.4",
- "@tiptap/extension-link": "^3.20.4",
- "@tiptap/extension-placeholder": "^3.20.4",
- "@tiptap/extension-text-align": "^3.20.4",
- "@tiptap/extension-text-style": "^3.20.4",
- "@tiptap/extension-underline": "^3.20.4",
- "@tiptap/pm": "^3.20.4",
- "@tiptap/react": "^3.20.4",
- "@tiptap/starter-kit": "^3.20.4",
- "asn1js": "^3.0.7",
+ "@tanstack/react-virtual": "^3.13.24",
+ "@tiptap/extension-color": "^3.22.4",
+ "@tiptap/extension-image": "^3.22.4",
+ "@tiptap/extension-link": "^3.22.4",
+ "@tiptap/extension-placeholder": "^3.22.4",
+ "@tiptap/extension-text-align": "^3.22.4",
+ "@tiptap/extension-text-style": "^3.22.4",
+ "@tiptap/extension-underline": "^3.22.4",
+ "@tiptap/pm": "^3.22.4",
+ "@tiptap/react": "^3.22.4",
+ "@tiptap/starter-kit": "^3.22.4",
+ "asn1js": "^3.0.10",
"clsx": "^2.1.1",
"date-fns": "^4.1.0",
- "dompurify": "^3.3.3",
+ "dompurify": "^3.4.1",
"jszip": "^3.10.1",
- "lucide-react": "^0.575.0",
- "next": "^16.1.5",
- "next-intl": "^4.5.8",
+ "lucide-react": "^1.8.0",
+ "next": "^16.2.4",
+ "next-intl": "^4.9.1",
"otpauth": "^9.5.0",
- "pkijs": "^3.3.3",
+ "pkijs": "^3.4.0",
"postal-mime": "^2.7.4",
"pvtsutils": "^1.3.6",
"qrcode": "^1.5.4",
- "react": "^19.2.1",
- "react-dom": "^19.2.1",
+ "react": "^19.2.5",
+ "react-dom": "^19.2.5",
"sonner": "^2.0.7",
"tailwind-merge": "^3.4.0",
"webcrypto-liner": "^1.4.3",
- "zustand": "^5.0.9"
+ "zustand": "^5.0.12"
},
"devDependencies": {
- "@eslint/js": "^9.39.3",
- "@playwright/test": "^1.58.2",
- "@tailwindcss/postcss": "^4",
+ "@eslint/js": "^9.39.4",
+ "@playwright/test": "^1.59.1",
+ "@tailwindcss/postcss": "^4.2.4",
"@testing-library/dom": "^10.4.1",
"@testing-library/jest-dom": "^6.9.1",
"@testing-library/react": "^16.3.1",
- "@types/node": "^25.2.3",
+ "@types/node": "^25.6.0",
"@types/qrcode": "^1.5.6",
"@types/react": "^19.2.7",
"@types/react-dom": "^19.2.3",
- "@typescript-eslint/eslint-plugin": "^8.49.0",
- "@typescript-eslint/parser": "^8.49.0",
- "@vitejs/plugin-react": "^5.1.2",
- "@vitest/ui": "^4.0.16",
- "eslint": "^9.39.2",
+ "@typescript-eslint/eslint-plugin": "^8.59.0",
+ "@typescript-eslint/parser": "^8.59.0",
+ "@vitejs/plugin-react": "^6.0.1",
+ "@vitest/ui": "^4.1.5",
+ "eslint": "^9.39.4",
"eslint-plugin-react": "^7.37.5",
- "eslint-plugin-react-hooks": "^7.0.1",
+ "eslint-plugin-react-hooks": "^7.1.1",
"fake-indexeddb": "^6.2.5",
- "globals": "^17.0.0",
+ "globals": "^17.5.0",
"husky": "^9.1.7",
"jsdom": "^28.1.0",
- "tailwindcss": "^4.1.17",
+ "tailwindcss": "^4.2.4",
"typescript": "^5.9.3",
- "vitest": "^4.0.16"
+ "vitest": "^4.1.5"
},
"overrides": {
"elliptic": {
diff --git a/specifications/auth/rfc5280.txt b/specifications/auth/rfc5280.txt
deleted file mode 100644
index 34d56992..00000000
--- a/specifications/auth/rfc5280.txt
+++ /dev/null
@@ -1,8459 +0,0 @@
-
-
-
-
-
-
-Network Working Group D. Cooper
-Request for Comments: 5280 NIST
-Obsoletes: 3280, 4325, 4630 S. Santesson
-Category: Standards Track Microsoft
- S. Farrell
- Trinity College Dublin
- S. Boeyen
- Entrust
- R. Housley
- Vigil Security
- W. Polk
- NIST
- May 2008
-
-
- Internet X.509 Public Key Infrastructure Certificate
- and Certificate Revocation List (CRL) Profile
-
-Status of This Memo
-
- This document specifies an Internet standards track protocol for the
- Internet community, and requests discussion and suggestions for
- improvements. Please refer to the current edition of the "Internet
- Official Protocol Standards" (STD 1) for the standardization state
- and status of this protocol. Distribution of this memo is unlimited.
-
-Abstract
-
- This memo profiles the X.509 v3 certificate and X.509 v2 certificate
- revocation list (CRL) for use in the Internet. An overview of this
- approach and model is provided as an introduction. The X.509 v3
- certificate format is described in detail, with additional
- information regarding the format and semantics of Internet name
- forms. Standard certificate extensions are described and two
- Internet-specific extensions are defined. A set of required
- certificate extensions is specified. The X.509 v2 CRL format is
- described in detail along with standard and Internet-specific
- extensions. An algorithm for X.509 certification path validation is
- described. An ASN.1 module and examples are provided in the
- appendices.
-
-
-
-
-
-
-
-
-
-
-
-Cooper, et al. Standards Track [Page 1]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
-Table of Contents
-
- 1. Introduction ....................................................4
- 2. Requirements and Assumptions ....................................6
- 2.1. Communication and Topology .................................7
- 2.2. Acceptability Criteria .....................................7
- 2.3. User Expectations ..........................................7
- 2.4. Administrator Expectations .................................8
- 3. Overview of Approach ............................................8
- 3.1. X.509 Version 3 Certificate ................................9
- 3.2. Certification Paths and Trust .............................10
- 3.3. Revocation ................................................13
- 3.4. Operational Protocols .....................................14
- 3.5. Management Protocols ......................................14
- 4. Certificate and Certificate Extensions Profile .................16
- 4.1. Basic Certificate Fields ..................................16
- 4.1.1. Certificate Fields .................................17
- 4.1.1.1. tbsCertificate ............................18
- 4.1.1.2. signatureAlgorithm ........................18
- 4.1.1.3. signatureValue ............................18
- 4.1.2. TBSCertificate .....................................18
- 4.1.2.1. Version ...................................19
- 4.1.2.2. Serial Number .............................19
- 4.1.2.3. Signature .................................19
- 4.1.2.4. Issuer ....................................20
- 4.1.2.5. Validity ..................................22
- 4.1.2.5.1. UTCTime ........................23
- 4.1.2.5.2. GeneralizedTime ................23
- 4.1.2.6. Subject ...................................23
- 4.1.2.7. Subject Public Key Info ...................25
- 4.1.2.8. Unique Identifiers ........................25
- 4.1.2.9. Extensions ................................26
- 4.2. Certificate Extensions ....................................26
- 4.2.1. Standard Extensions ................................27
- 4.2.1.1. Authority Key Identifier ..................27
- 4.2.1.2. Subject Key Identifier ....................28
- 4.2.1.3. Key Usage .................................29
- 4.2.1.4. Certificate Policies ......................32
- 4.2.1.5. Policy Mappings ...........................35
- 4.2.1.6. Subject Alternative Name ..................35
- 4.2.1.7. Issuer Alternative Name ...................38
- 4.2.1.8. Subject Directory Attributes ..............39
- 4.2.1.9. Basic Constraints .........................39
- 4.2.1.10. Name Constraints .........................40
- 4.2.1.11. Policy Constraints .......................43
- 4.2.1.12. Extended Key Usage .......................44
- 4.2.1.13. CRL Distribution Points ..................45
- 4.2.1.14. Inhibit anyPolicy ........................48
-
-
-
-Cooper, et al. Standards Track [Page 2]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- 4.2.1.15. Freshest CRL (a.k.a. Delta CRL
- Distribution Point) ......................48
- 4.2.2. Private Internet Extensions ........................49
- 4.2.2.1. Authority Information Access ..............49
- 4.2.2.2. Subject Information Access ................51
- 5. CRL and CRL Extensions Profile .................................54
- 5.1. CRL Fields ................................................55
- 5.1.1. CertificateList Fields .............................56
- 5.1.1.1. tbsCertList ...............................56
- 5.1.1.2. signatureAlgorithm ........................57
- 5.1.1.3. signatureValue ............................57
- 5.1.2. Certificate List "To Be Signed" ....................58
- 5.1.2.1. Version ...................................58
- 5.1.2.2. Signature .................................58
- 5.1.2.3. Issuer Name ...............................58
- 5.1.2.4. This Update ...............................58
- 5.1.2.5. Next Update ...............................59
- 5.1.2.6. Revoked Certificates ......................59
- 5.1.2.7. Extensions ................................60
- 5.2. CRL Extensions ............................................60
- 5.2.1. Authority Key Identifier ...........................60
- 5.2.2. Issuer Alternative Name ............................60
- 5.2.3. CRL Number .........................................61
- 5.2.4. Delta CRL Indicator ................................62
- 5.2.5. Issuing Distribution Point .........................65
- 5.2.6. Freshest CRL (a.k.a. Delta CRL Distribution
- Point) .............................................67
- 5.2.7. Authority Information Access .......................67
- 5.3. CRL Entry Extensions ......................................69
- 5.3.1. Reason Code ........................................69
- 5.3.2. Invalidity Date ....................................70
- 5.3.3. Certificate Issuer .................................70
- 6. Certification Path Validation ..................................71
- 6.1. Basic Path Validation .....................................72
- 6.1.1. Inputs .............................................75
- 6.1.2. Initialization .....................................77
- 6.1.3. Basic Certificate Processing .......................80
- 6.1.4. Preparation for Certificate i+1 ....................84
- 6.1.5. Wrap-Up Procedure ..................................87
- 6.1.6. Outputs ............................................89
- 6.2. Using the Path Validation Algorithm .......................89
- 6.3. CRL Validation ............................................90
- 6.3.1. Revocation Inputs ..................................91
- 6.3.2. Initialization and Revocation State Variables ......91
- 6.3.3. CRL Processing .....................................92
- 7. Processing Rules for Internationalized Names ...................95
- 7.1. Internationalized Names in Distinguished Names ............96
- 7.2. Internationalized Domain Names in GeneralName .............97
-
-
-
-Cooper, et al. Standards Track [Page 3]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- 7.3. Internationalized Domain Names in Distinguished Names .....98
- 7.4. Internationalized Resource Identifiers ....................98
- 7.5. Internationalized Electronic Mail Addresses ..............100
- 8. Security Considerations .......................................100
- 9. IANA Considerations ...........................................105
- 10. Acknowledgments ..............................................105
- 11. References ...................................................105
- 11.1. Normative References ....................................105
- 11.2. Informative References ..................................107
- Appendix A. Pseudo-ASN.1 Structures and OIDs ....................110
- A.1. Explicitly Tagged Module, 1988 Syntax ....................110
- A.2. Implicitly Tagged Module, 1988 Syntax ....................125
- Appendix B. ASN.1 Notes ..........................................133
- Appendix C. Examples .............................................136
- C.1. RSA Self-Signed Certificate ..............................137
- C.2. End Entity Certificate Using RSA .........................140
- C.3. End Entity Certificate Using DSA .........................143
- C.4. Certificate Revocation List ..............................147
-
-1. Introduction
-
- This specification is one part of a family of standards for the X.509
- Public Key Infrastructure (PKI) for the Internet.
-
- This specification profiles the format and semantics of certificates
- and certificate revocation lists (CRLs) for the Internet PKI.
- Procedures are described for processing of certification paths in the
- Internet environment. Finally, ASN.1 modules are provided in the
- appendices for all data structures defined or referenced.
-
- Section 2 describes Internet PKI requirements and the assumptions
- that affect the scope of this document. Section 3 presents an
- architectural model and describes its relationship to previous IETF
- and ISO/IEC/ITU-T standards. In particular, this document's
- relationship with the IETF PEM specifications and the ISO/IEC/ITU-T
- X.509 documents is described.
-
- Section 4 profiles the X.509 version 3 certificate, and Section 5
- profiles the X.509 version 2 CRL. The profiles include the
- identification of ISO/IEC/ITU-T and ANSI extensions that may be
- useful in the Internet PKI. The profiles are presented in the 1988
- Abstract Syntax Notation One (ASN.1) rather than the 1997 ASN.1
- syntax used in the most recent ISO/IEC/ITU-T standards.
-
- Section 6 includes certification path validation procedures. These
- procedures are based upon the ISO/IEC/ITU-T definition.
- Implementations are REQUIRED to derive the same results but are not
- required to use the specified procedures.
-
-
-
-Cooper, et al. Standards Track [Page 4]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- Procedures for identification and encoding of public key materials
- and digital signatures are defined in [RFC3279], [RFC4055], and
- [RFC4491]. Implementations of this specification are not required to
- use any particular cryptographic algorithms. However, conforming
- implementations that use the algorithms identified in [RFC3279],
- [RFC4055], and [RFC4491] MUST identify and encode the public key
- materials and digital signatures as described in those
- specifications.
-
- Finally, three appendices are provided to aid implementers. Appendix
- A contains all ASN.1 structures defined or referenced within this
- specification. As above, the material is presented in the 1988
- ASN.1. Appendix B contains notes on less familiar features of the
- ASN.1 notation used within this specification. Appendix C contains
- examples of conforming certificates and a conforming CRL.
-
- This specification obsoletes [RFC3280]. Differences from RFC 3280
- are summarized below:
-
- * Enhanced support for internationalized names is specified in
- Section 7, with rules for encoding and comparing
- Internationalized Domain Names, Internationalized Resource
- Identifiers (IRIs), and distinguished names. These rules are
- aligned with comparison rules established in current RFCs,
- including [RFC3490], [RFC3987], and [RFC4518].
-
- * Sections 4.1.2.4 and 4.1.2.6 incorporate the conditions for
- continued use of legacy text encoding schemes that were
- specified in [RFC4630]. Where in use by an established PKI,
- transition to UTF8String could cause denial of service based on
- name chaining failures or incorrect processing of name
- constraints.
-
- * Section 4.2.1.4 in RFC 3280, which specified the
- privateKeyUsagePeriod certificate extension but deprecated its
- use, was removed. Use of this ISO standard extension is neither
- deprecated nor recommended for use in the Internet PKI.
-
- * Section 4.2.1.5 recommends marking the policy mappings extension
- as critical. RFC 3280 required that the policy mappings
- extension be marked as non-critical.
-
- * Section 4.2.1.11 requires marking the policy constraints
- extension as critical. RFC 3280 permitted the policy
- constraints extension to be marked as critical or non-critical.
-
- * The Authority Information Access (AIA) CRL extension, as
- specified in [RFC4325], was added as Section 5.2.7.
-
-
-
-Cooper, et al. Standards Track [Page 5]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- * Sections 5.2 and 5.3 clarify the rules for handling unrecognized
- CRL extensions and CRL entry extensions, respectively.
-
- * Section 5.3.2 in RFC 3280, which specified the
- holdInstructionCode CRL entry extension, was removed.
-
- * The path validation algorithm specified in Section 6 no longer
- tracks the criticality of the certificate policies extensions in
- a chain of certificates. In RFC 3280, this information was
- returned to a relying party.
-
- * The Security Considerations section addresses the risk of
- circular dependencies arising from the use of https or similar
- schemes in the CRL distribution points, authority information
- access, or subject information access extensions.
-
- * The Security Considerations section addresses risks associated
- with name ambiguity.
-
- * The Security Considerations section references RFC 4210 for
- procedures to signal changes in CA operations.
-
- The ASN.1 modules in Appendix A are unchanged from RFC 3280, except
- that ub-emailaddress-length was changed from 128 to 255 in order to
- align with PKCS #9 [RFC2985].
-
- The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
- "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
- document are to be interpreted as described in [RFC2119].
-
-2. Requirements and Assumptions
-
- The goal of this specification is to develop a profile to facilitate
- the use of X.509 certificates within Internet applications for those
- communities wishing to make use of X.509 technology. Such
- applications may include WWW, electronic mail, user authentication,
- and IPsec. In order to relieve some of the obstacles to using X.509
- certificates, this document defines a profile to promote the
- development of certificate management systems, development of
- application tools, and interoperability determined by policy.
-
- Some communities will need to supplement, or possibly replace, this
- profile in order to meet the requirements of specialized application
- domains or environments with additional authorization, assurance, or
- operational requirements. However, for basic applications, common
- representations of frequently used attributes are defined so that
-
-
-
-
-
-Cooper, et al. Standards Track [Page 6]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- application developers can obtain necessary information without
- regard to the issuer of a particular certificate or certificate
- revocation list (CRL).
-
- A certificate user should review the certificate policy generated by
- the certification authority (CA) before relying on the authentication
- or non-repudiation services associated with the public key in a
- particular certificate. To this end, this standard does not
- prescribe legally binding rules or duties.
-
- As supplemental authorization and attribute management tools emerge,
- such as attribute certificates, it may be appropriate to limit the
- authenticated attributes that are included in a certificate. These
- other management tools may provide more appropriate methods of
- conveying many authenticated attributes.
-
-2.1. Communication and Topology
-
- The users of certificates will operate in a wide range of
- environments with respect to their communication topology, especially
- users of secure electronic mail. This profile supports users without
- high bandwidth, real-time IP connectivity, or high connection
- availability. In addition, the profile allows for the presence of
- firewall or other filtered communication.
-
- This profile does not assume the deployment of an X.500 directory
- system [X.500] or a Lightweight Directory Access Protocol (LDAP)
- directory system [RFC4510]. The profile does not prohibit the use of
- an X.500 directory or an LDAP directory; however, any means of
- distributing certificates and certificate revocation lists (CRLs) may
- be used.
-
-2.2. Acceptability Criteria
-
- The goal of the Internet Public Key Infrastructure (PKI) is to meet
- the needs of deterministic, automated identification, authentication,
- access control, and authorization functions. Support for these
- services determines the attributes contained in the certificate as
- well as the ancillary control information in the certificate such as
- policy data and certification path constraints.
-
-2.3. User Expectations
-
- Users of the Internet PKI are people and processes who use client
- software and are the subjects named in certificates. These uses
- include readers and writers of electronic mail, the clients for WWW
- browsers, WWW servers, and the key manager for IPsec within a router.
- This profile recognizes the limitations of the platforms these users
-
-
-
-Cooper, et al. Standards Track [Page 7]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- employ and the limitations in sophistication and attentiveness of the
- users themselves. This manifests itself in minimal user
- configuration responsibility (e.g., trusted CA keys, rules), explicit
- platform usage constraints within the certificate, certification path
- constraints that shield the user from many malicious actions, and
- applications that sensibly automate validation functions.
-
-2.4. Administrator Expectations
-
- As with user expectations, the Internet PKI profile is structured to
- support the individuals who generally operate CAs. Providing
- administrators with unbounded choices increases the chances that a
- subtle CA administrator mistake will result in broad compromise.
- Also, unbounded choices greatly complicate the software that process
- and validate the certificates created by the CA.
-
-3. Overview of Approach
-
- Following is a simplified view of the architectural model assumed by
- the Public-Key Infrastructure using X.509 (PKIX) specifications.
-
- The components in this model are:
-
- end entity: user of PKI certificates and/or end user system that is
- the subject of a certificate;
-
- CA: certification authority;
-
- RA: registration authority, i.e., an optional system to which
- a CA delegates certain management functions;
-
- CRL issuer: a system that generates and signs CRLs; and
-
- repository: a system or collection of distributed systems that stores
- certificates and CRLs and serves as a means of
- distributing these certificates and CRLs to end entities.
-
- CAs are responsible for indicating the revocation status of the
- certificates that they issue. Revocation status information may be
- provided using the Online Certificate Status Protocol (OCSP)
- [RFC2560], certificate revocation lists (CRLs), or some other
- mechanism. In general, when revocation status information is
- provided using CRLs, the CA is also the CRL issuer. However, a CA
- may delegate the responsibility for issuing CRLs to a different
- entity.
-
- Note that an Attribute Authority (AA) might also choose to delegate
- the publication of CRLs to a CRL issuer.
-
-
-
-Cooper, et al. Standards Track [Page 8]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- +---+
- | C | +------------+
- | e | <-------------------->| End entity |
- | r | Operational +------------+
- | t | transactions ^
- | i | and management | Management
- | f | transactions | transactions PKI
- | i | | users
- | c | v
- | a | ======================= +--+------------+ ==============
- | t | ^ ^
- | e | | | PKI
- | | v | management
- | & | +------+ | entities
- | | <---------------------| RA |<----+ |
- | C | Publish certificate +------+ | |
- | R | | |
- | L | | |
- | | v v
- | R | +------------+
- | e | <------------------------------| CA |
- | p | Publish certificate +------------+
- | o | Publish CRL ^ ^
- | s | | | Management
- | i | +------------+ | | transactions
- | t | <--------------| CRL Issuer |<----+ |
- | o | Publish CRL +------------+ v
- | r | +------+
- | y | | CA |
- +---+ +------+
-
- Figure 1. PKI Entities
-
-3.1. X.509 Version 3 Certificate
-
- Users of a public key require confidence that the associated private
- key is owned by the correct remote subject (person or system) with
- which an encryption or digital signature mechanism will be used.
- This confidence is obtained through the use of public key
- certificates, which are data structures that bind public key values
- to subjects. The binding is asserted by having a trusted CA
- digitally sign each certificate. The CA may base this assertion upon
- technical means (a.k.a., proof of possession through a challenge-
- response protocol), presentation of the private key, or on an
- assertion by the subject. A certificate has a limited valid
- lifetime, which is indicated in its signed contents. Because a
- certificate's signature and timeliness can be independently checked
- by a certificate-using client, certificates can be distributed via
-
-
-
-Cooper, et al. Standards Track [Page 9]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- untrusted communications and server systems, and can be cached in
- unsecured storage in certificate-using systems.
-
- ITU-T X.509 (formerly CCITT X.509) or ISO/IEC 9594-8, which was first
- published in 1988 as part of the X.500 directory recommendations,
- defines a standard certificate format [X.509]. The certificate
- format in the 1988 standard is called the version 1 (v1) format.
- When X.500 was revised in 1993, two more fields were added, resulting
- in the version 2 (v2) format.
-
- The Internet Privacy Enhanced Mail (PEM) RFCs, published in 1993,
- include specifications for a public key infrastructure based on X.509
- v1 certificates [RFC1422]. The experience gained in attempts to
- deploy RFC 1422 made it clear that the v1 and v2 certificate formats
- were deficient in several respects. Most importantly, more fields
- were needed to carry information that PEM design and implementation
- experience had proven necessary. In response to these new
- requirements, the ISO/IEC, ITU-T, and ANSI X9 developed the X.509
- version 3 (v3) certificate format. The v3 format extends the v2
- format by adding provision for additional extension fields.
- Particular extension field types may be specified in standards or may
- be defined and registered by any organization or community. In June
- 1996, standardization of the basic v3 format was completed [X.509].
-
- ISO/IEC, ITU-T, and ANSI X9 have also developed standard extensions
- for use in the v3 extensions field [X.509][X9.55]. These extensions
- can convey such data as additional subject identification
- information, key attribute information, policy information, and
- certification path constraints.
-
- However, the ISO/IEC, ITU-T, and ANSI X9 standard extensions are very
- broad in their applicability. In order to develop interoperable
- implementations of X.509 v3 systems for Internet use, it is necessary
- to specify a profile for use of the X.509 v3 extensions tailored for
- the Internet. It is one goal of this document to specify a profile
- for Internet WWW, electronic mail, and IPsec applications.
- Environments with additional requirements may build on this profile
- or may replace it.
-
-3.2. Certification Paths and Trust
-
- A user of a security service requiring knowledge of a public key
- generally needs to obtain and validate a certificate containing the
- required public key. If the public key user does not already hold an
- assured copy of the public key of the CA that signed the certificate,
- the CA's name, and related information (such as the validity period
- or name constraints), then it might need an additional certificate to
- obtain that public key. In general, a chain of multiple certificates
-
-
-
-Cooper, et al. Standards Track [Page 10]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- may be needed, comprising a certificate of the public key owner (the
- end entity) signed by one CA, and zero or more additional
- certificates of CAs signed by other CAs. Such chains, called
- certification paths, are required because a public key user is only
- initialized with a limited number of assured CA public keys.
-
- There are different ways in which CAs might be configured in order
- for public key users to be able to find certification paths. For
- PEM, RFC 1422 defined a rigid hierarchical structure of CAs. There
- are three types of PEM certification authority:
-
- (a) Internet Policy Registration Authority (IPRA): This
- authority, operated under the auspices of the Internet
- Society, acts as the root of the PEM certification hierarchy
- at level 1. It issues certificates only for the next level
- of authorities, PCAs. All certification paths start with the
- IPRA.
-
- (b) Policy Certification Authorities (PCAs): PCAs are at level 2
- of the hierarchy, each PCA being certified by the IPRA. A
- PCA shall establish and publish a statement of its policy
- with respect to certifying users or subordinate certification
- authorities. Distinct PCAs aim to satisfy different user
- needs. For example, one PCA (an organizational PCA) might
- support the general electronic mail needs of commercial
- organizations, and another PCA (a high-assurance PCA) might
- have a more stringent policy designed for satisfying legally
- binding digital signature requirements.
-
- (c) Certification Authorities (CAs): CAs are at level 3 of the
- hierarchy and can also be at lower levels. Those at level 3
- are certified by PCAs. CAs represent, for example,
- particular organizations, particular organizational units
- (e.g., departments, groups, sections), or particular
- geographical areas.
-
- RFC 1422 furthermore has a name subordination rule, which requires
- that a CA can only issue certificates for entities whose names are
- subordinate (in the X.500 naming tree) to the name of the CA itself.
- The trust associated with a PEM certification path is implied by the
- PCA name. The name subordination rule ensures that CAs below the PCA
- are sensibly constrained as to the set of subordinate entities they
- can certify (e.g., a CA for an organization can only certify entities
- in that organization's name tree). Certificate user systems are able
- to mechanically check that the name subordination rule has been
- followed.
-
-
-
-
-
-Cooper, et al. Standards Track [Page 11]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- RFC 1422 uses the X.509 v1 certificate format. The limitations of
- X.509 v1 required imposition of several structural restrictions to
- clearly associate policy information or restrict the utility of
- certificates. These restrictions included:
-
- (a) a pure top-down hierarchy, with all certification paths
- starting from IPRA;
-
- (b) a naming subordination rule restricting the names of a CA's
- subjects; and
-
- (c) use of the PCA concept, which requires knowledge of
- individual PCAs to be built into certificate chain
- verification logic. Knowledge of individual PCAs was
- required to determine if a chain could be accepted.
-
- With X.509 v3, most of the requirements addressed by RFC 1422 can be
- addressed using certificate extensions, without a need to restrict
- the CA structures used. In particular, the certificate extensions
- relating to certificate policies obviate the need for PCAs and the
- constraint extensions obviate the need for the name subordination
- rule. As a result, this document supports a more flexible
- architecture, including:
-
- (a) Certification paths start with a public key of a CA in a
- user's own domain, or with the public key of the top of a
- hierarchy. Starting with the public key of a CA in a user's
- own domain has certain advantages. In some environments, the
- local domain is the most trusted.
-
- (b) Name constraints may be imposed through explicit inclusion of
- a name constraints extension in a certificate, but are not
- required.
-
- (c) Policy extensions and policy mappings replace the PCA
- concept, which permits a greater degree of automation. The
- application can determine if the certification path is
- acceptable based on the contents of the certificates instead
- of a priori knowledge of PCAs. This permits automation of
- certification path processing.
-
- X.509 v3 also includes an extension that identifies the subject of a
- certificate as being either a CA or an end entity, reducing the
- reliance on out-of-band information demanded in PEM.
-
- This specification covers two classes of certificates: CA
- certificates and end entity certificates. CA certificates may be
- further divided into three classes: cross-certificates, self-issued
-
-
-
-Cooper, et al. Standards Track [Page 12]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- certificates, and self-signed certificates. Cross-certificates are
- CA certificates in which the issuer and subject are different
- entities. Cross-certificates describe a trust relationship between
- the two CAs. Self-issued certificates are CA certificates in which
- the issuer and subject are the same entity. Self-issued certificates
- are generated to support changes in policy or operations. Self-
- signed certificates are self-issued certificates where the digital
- signature may be verified by the public key bound into the
- certificate. Self-signed certificates are used to convey a public
- key for use to begin certification paths. End entity certificates
- are issued to subjects that are not authorized to issue certificates.
-
-3.3. Revocation
-
- When a certificate is issued, it is expected to be in use for its
- entire validity period. However, various circumstances may cause a
- certificate to become invalid prior to the expiration of the validity
- period. Such circumstances include change of name, change of
- association between subject and CA (e.g., an employee terminates
- employment with an organization), and compromise or suspected
- compromise of the corresponding private key. Under such
- circumstances, the CA needs to revoke the certificate.
-
- X.509 defines one method of certificate revocation. This method
- involves each CA periodically issuing a signed data structure called
- a certificate revocation list (CRL). A CRL is a time-stamped list
- identifying revoked certificates that is signed by a CA or CRL issuer
- and made freely available in a public repository. Each revoked
- certificate is identified in a CRL by its certificate serial number.
- When a certificate-using system uses a certificate (e.g., for
- verifying a remote user's digital signature), that system not only
- checks the certificate signature and validity but also acquires a
- suitably recent CRL and checks that the certificate serial number is
- not on that CRL. The meaning of "suitably recent" may vary with
- local policy, but it usually means the most recently issued CRL. A
- new CRL is issued on a regular periodic basis (e.g., hourly, daily,
- or weekly). An entry is added to the CRL as part of the next update
- following notification of revocation. An entry MUST NOT be removed
- from the CRL until it appears on one regularly scheduled CRL issued
- beyond the revoked certificate's validity period.
-
- An advantage of this revocation method is that CRLs may be
- distributed by exactly the same means as certificates themselves,
- namely, via untrusted servers and untrusted communications.
-
- One limitation of the CRL revocation method, using untrusted
- communications and servers, is that the time granularity of
- revocation is limited to the CRL issue period. For example, if a
-
-
-
-Cooper, et al. Standards Track [Page 13]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- revocation is reported now, that revocation will not be reliably
- notified to certificate-using systems until all currently issued CRLs
- are scheduled to be updated -- this may be up to one hour, one day,
- or one week depending on the frequency that CRLs are issued.
-
- As with the X.509 v3 certificate format, in order to facilitate
- interoperable implementations from multiple vendors, the X.509 v2 CRL
- format needs to be profiled for Internet use. It is one goal of this
- document to specify that profile. However, this profile does not
- require the issuance of CRLs. Message formats and protocols
- supporting on-line revocation notification are defined in other PKIX
- specifications. On-line methods of revocation notification may be
- applicable in some environments as an alternative to the X.509 CRL.
- On-line revocation checking may significantly reduce the latency
- between a revocation report and the distribution of the information
- to relying parties. Once the CA accepts a revocation report as
- authentic and valid, any query to the on-line service will correctly
- reflect the certificate validation impacts of the revocation.
- However, these methods impose new security requirements: the
- certificate validator needs to trust the on-line validation service
- while the repository does not need to be trusted.
-
-3.4. Operational Protocols
-
- Operational protocols are required to deliver certificates and CRLs
- (or status information) to certificate-using client systems.
- Provisions are needed for a variety of different means of certificate
- and CRL delivery, including distribution procedures based on LDAP,
- HTTP, FTP, and X.500. Operational protocols supporting these
- functions are defined in other PKIX specifications. These
- specifications may include definitions of message formats and
- procedures for supporting all of the above operational environments,
- including definitions of or references to appropriate MIME content
- types.
-
-3.5. Management Protocols
-
- Management protocols are required to support on-line interactions
- between PKI user and management entities. For example, a management
- protocol might be used between a CA and a client system with which a
- key pair is associated, or between two CAs that cross-certify each
- other. The set of functions that potentially need to be supported by
- management protocols include:
-
- (a) registration: This is the process whereby a user first makes
- itself known to a CA (directly, or through an RA), prior to
- that CA issuing a certificate or certificates for that user.
-
-
-
-
-Cooper, et al. Standards Track [Page 14]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- (b) initialization: Before a client system can operate securely,
- it is necessary to install key materials that have the
- appropriate relationship with keys stored elsewhere in the
- infrastructure. For example, the client needs to be securely
- initialized with the public key and other assured information
- of the trusted CA(s), to be used in validating certificate
- paths.
-
- Furthermore, a client typically needs to be initialized with
- its own key pair(s).
-
- (c) certification: This is the process in which a CA issues a
- certificate for a user's public key, and returns that
- certificate to the user's client system and/or posts that
- certificate in a repository.
-
- (d) key pair recovery: As an option, user client key materials
- (e.g., a user's private key used for encryption purposes) may
- be backed up by a CA or a key backup system. If a user needs
- to recover these backed-up key materials (e.g., as a result
- of a forgotten password or a lost key chain file), an on-line
- protocol exchange may be needed to support such recovery.
-
- (e) key pair update: All key pairs need to be updated regularly,
- i.e., replaced with a new key pair, and new certificates
- issued.
-
- (f) revocation request: An authorized person advises a CA of an
- abnormal situation requiring certificate revocation.
-
- (g) cross-certification: Two CAs exchange information used in
- establishing a cross-certificate. A cross-certificate is a
- certificate issued by one CA to another CA that contains a CA
- signature key used for issuing certificates.
-
- Note that on-line protocols are not the only way of implementing the
- above functions. For all functions, there are off-line methods of
- achieving the same result, and this specification does not mandate
- use of on-line protocols. For example, when hardware tokens are
- used, many of the functions may be achieved as part of the physical
- token delivery. Furthermore, some of the above functions may be
- combined into one protocol exchange. In particular, two or more of
- the registration, initialization, and certification functions can be
- combined into one protocol exchange.
-
-
-
-
-
-
-
-Cooper, et al. Standards Track [Page 15]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- The PKIX series of specifications defines a set of standard message
- formats supporting the above functions. The protocols for conveying
- these messages in different environments (e.g., email, file transfer,
- and WWW) are described in those specifications.
-
-4. Certificate and Certificate Extensions Profile
-
- This section presents a profile for public key certificates that will
- foster interoperability and a reusable PKI. This section is based
- upon the X.509 v3 certificate format and the standard certificate
- extensions defined in [X.509]. The ISO/IEC and ITU-T documents use
- the 1997 version of ASN.1; while this document uses the 1988 ASN.1
- syntax, the encoded certificate and standard extensions are
- equivalent. This section also defines private extensions required to
- support a PKI for the Internet community.
-
- Certificates may be used in a wide range of applications and
- environments covering a broad spectrum of interoperability goals and
- a broader spectrum of operational and assurance requirements. The
- goal of this document is to establish a common baseline for generic
- applications requiring broad interoperability and limited special
- purpose requirements. In particular, the emphasis will be on
- supporting the use of X.509 v3 certificates for informal Internet
- electronic mail, IPsec, and WWW applications.
-
-4.1. Basic Certificate Fields
-
- The X.509 v3 certificate basic syntax is as follows. For signature
- calculation, the data that is to be signed is encoded using the ASN.1
- distinguished encoding rules (DER) [X.690]. ASN.1 DER encoding is a
- tag, length, value encoding system for each element.
-
- Certificate ::= SEQUENCE {
- tbsCertificate TBSCertificate,
- signatureAlgorithm AlgorithmIdentifier,
- signatureValue BIT STRING }
-
- TBSCertificate ::= SEQUENCE {
- version [0] EXPLICIT Version DEFAULT v1,
- serialNumber CertificateSerialNumber,
- signature AlgorithmIdentifier,
- issuer Name,
- validity Validity,
- subject Name,
- subjectPublicKeyInfo SubjectPublicKeyInfo,
- issuerUniqueID [1] IMPLICIT UniqueIdentifier OPTIONAL,
- -- If present, version MUST be v2 or v3
-
-
-
-
-Cooper, et al. Standards Track [Page 16]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- subjectUniqueID [2] IMPLICIT UniqueIdentifier OPTIONAL,
- -- If present, version MUST be v2 or v3
- extensions [3] EXPLICIT Extensions OPTIONAL
- -- If present, version MUST be v3
- }
-
- Version ::= INTEGER { v1(0), v2(1), v3(2) }
-
- CertificateSerialNumber ::= INTEGER
-
- Validity ::= SEQUENCE {
- notBefore Time,
- notAfter Time }
-
- Time ::= CHOICE {
- utcTime UTCTime,
- generalTime GeneralizedTime }
-
- UniqueIdentifier ::= BIT STRING
-
- SubjectPublicKeyInfo ::= SEQUENCE {
- algorithm AlgorithmIdentifier,
- subjectPublicKey BIT STRING }
-
- Extensions ::= SEQUENCE SIZE (1..MAX) OF Extension
-
- Extension ::= SEQUENCE {
- extnID OBJECT IDENTIFIER,
- critical BOOLEAN DEFAULT FALSE,
- extnValue OCTET STRING
- -- contains the DER encoding of an ASN.1 value
- -- corresponding to the extension type identified
- -- by extnID
- }
-
- The following items describe the X.509 v3 certificate for use in the
- Internet.
-
-4.1.1. Certificate Fields
-
- The Certificate is a SEQUENCE of three required fields. The fields
- are described in detail in the following subsections.
-
-
-
-
-
-
-
-
-
-Cooper, et al. Standards Track [Page 17]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
-4.1.1.1. tbsCertificate
-
- The field contains the names of the subject and issuer, a public key
- associated with the subject, a validity period, and other associated
- information. The fields are described in detail in Section 4.1.2;
- the tbsCertificate usually includes extensions, which are described
- in Section 4.2.
-
-4.1.1.2. signatureAlgorithm
-
- The signatureAlgorithm field contains the identifier for the
- cryptographic algorithm used by the CA to sign this certificate.
- [RFC3279], [RFC4055], and [RFC4491] list supported signature
- algorithms, but other signature algorithms MAY also be supported.
-
- An algorithm identifier is defined by the following ASN.1 structure:
-
- AlgorithmIdentifier ::= SEQUENCE {
- algorithm OBJECT IDENTIFIER,
- parameters ANY DEFINED BY algorithm OPTIONAL }
-
- The algorithm identifier is used to identify a cryptographic
- algorithm. The OBJECT IDENTIFIER component identifies the algorithm
- (such as DSA with SHA-1). The contents of the optional parameters
- field will vary according to the algorithm identified.
-
- This field MUST contain the same algorithm identifier as the
- signature field in the sequence tbsCertificate (Section 4.1.2.3).
-
-4.1.1.3. signatureValue
-
- The signatureValue field contains a digital signature computed upon
- the ASN.1 DER encoded tbsCertificate. The ASN.1 DER encoded
- tbsCertificate is used as the input to the signature function. This
- signature value is encoded as a BIT STRING and included in the
- signature field. The details of this process are specified for each
- of the algorithms listed in [RFC3279], [RFC4055], and [RFC4491].
-
- By generating this signature, a CA certifies the validity of the
- information in the tbsCertificate field. In particular, the CA
- certifies the binding between the public key material and the subject
- of the certificate.
-
-4.1.2. TBSCertificate
-
- The sequence TBSCertificate contains information associated with the
- subject of the certificate and the CA that issued it. Every
- TBSCertificate contains the names of the subject and issuer, a public
-
-
-
-Cooper, et al. Standards Track [Page 18]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- key associated with the subject, a validity period, a version number,
- and a serial number; some MAY contain optional unique identifier
- fields. The remainder of this section describes the syntax and
- semantics of these fields. A TBSCertificate usually includes
- extensions. Extensions for the Internet PKI are described in Section
- 4.2.
-
-4.1.2.1. Version
-
- This field describes the version of the encoded certificate. When
- extensions are used, as expected in this profile, version MUST be 3
- (value is 2). If no extensions are present, but a UniqueIdentifier
- is present, the version SHOULD be 2 (value is 1); however, the
- version MAY be 3. If only basic fields are present, the version
- SHOULD be 1 (the value is omitted from the certificate as the default
- value); however, the version MAY be 2 or 3.
-
- Implementations SHOULD be prepared to accept any version certificate.
- At a minimum, conforming implementations MUST recognize version 3
- certificates.
-
- Generation of version 2 certificates is not expected by
- implementations based on this profile.
-
-4.1.2.2. Serial Number
-
- The serial number MUST be a positive integer assigned by the CA to
- each certificate. It MUST be unique for each certificate issued by a
- given CA (i.e., the issuer name and serial number identify a unique
- certificate). CAs MUST force the serialNumber to be a non-negative
- integer.
-
- Given the uniqueness requirements above, serial numbers can be
- expected to contain long integers. Certificate users MUST be able to
- handle serialNumber values up to 20 octets. Conforming CAs MUST NOT
- use serialNumber values longer than 20 octets.
-
- Note: Non-conforming CAs may issue certificates with serial numbers
- that are negative or zero. Certificate users SHOULD be prepared to
- gracefully handle such certificates.
-
-4.1.2.3. Signature
-
- This field contains the algorithm identifier for the algorithm used
- by the CA to sign the certificate.
-
- This field MUST contain the same algorithm identifier as the
- signatureAlgorithm field in the sequence Certificate (Section
-
-
-
-Cooper, et al. Standards Track [Page 19]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- 4.1.1.2). The contents of the optional parameters field will vary
- according to the algorithm identified. [RFC3279], [RFC4055], and
- [RFC4491] list supported signature algorithms, but other signature
- algorithms MAY also be supported.
-
-4.1.2.4. Issuer
-
- The issuer field identifies the entity that has signed and issued the
- certificate. The issuer field MUST contain a non-empty distinguished
- name (DN). The issuer field is defined as the X.501 type Name
- [X.501]. Name is defined by the following ASN.1 structures:
-
- Name ::= CHOICE { -- only one possibility for now --
- rdnSequence RDNSequence }
-
- RDNSequence ::= SEQUENCE OF RelativeDistinguishedName
-
- RelativeDistinguishedName ::=
- SET SIZE (1..MAX) OF AttributeTypeAndValue
-
- AttributeTypeAndValue ::= SEQUENCE {
- type AttributeType,
- value AttributeValue }
-
- AttributeType ::= OBJECT IDENTIFIER
-
- AttributeValue ::= ANY -- DEFINED BY AttributeType
-
- DirectoryString ::= CHOICE {
- teletexString TeletexString (SIZE (1..MAX)),
- printableString PrintableString (SIZE (1..MAX)),
- universalString UniversalString (SIZE (1..MAX)),
- utf8String UTF8String (SIZE (1..MAX)),
- bmpString BMPString (SIZE (1..MAX)) }
-
- The Name describes a hierarchical name composed of attributes, such
- as country name, and corresponding values, such as US. The type of
- the component AttributeValue is determined by the AttributeType; in
- general it will be a DirectoryString.
-
- The DirectoryString type is defined as a choice of PrintableString,
- TeletexString, BMPString, UTF8String, and UniversalString. CAs
- conforming to this profile MUST use either the PrintableString or
- UTF8String encoding of DirectoryString, with two exceptions. When
- CAs have previously issued certificates with issuer fields with
- attributes encoded using TeletexString, BMPString, or
- UniversalString, then the CA MAY continue to use these encodings of
- the DirectoryString to preserve backward compatibility. Also, new
-
-
-
-Cooper, et al. Standards Track [Page 20]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- CAs that are added to a domain where existing CAs issue certificates
- with issuer fields with attributes encoded using TeletexString,
- BMPString, or UniversalString MAY encode attributes that they share
- with the existing CAs using the same encodings as the existing CAs
- use.
-
- As noted above, distinguished names are composed of attributes. This
- specification does not restrict the set of attribute types that may
- appear in names. However, conforming implementations MUST be
- prepared to receive certificates with issuer names containing the set
- of attribute types defined below. This specification RECOMMENDS
- support for additional attribute types.
-
- Standard sets of attributes have been defined in the X.500 series of
- specifications [X.520]. Implementations of this specification MUST
- be prepared to receive the following standard attribute types in
- issuer and subject (Section 4.1.2.6) names:
-
- * country,
- * organization,
- * organizational unit,
- * distinguished name qualifier,
- * state or province name,
- * common name (e.g., "Susan Housley"), and
- * serial number.
-
- In addition, implementations of this specification SHOULD be prepared
- to receive the following standard attribute types in issuer and
- subject names:
-
- * locality,
- * title,
- * surname,
- * given name,
- * initials,
- * pseudonym, and
- * generation qualifier (e.g., "Jr.", "3rd", or "IV").
-
- The syntax and associated object identifiers (OIDs) for these
- attribute types are provided in the ASN.1 modules in Appendix A.
-
- In addition, implementations of this specification MUST be prepared
- to receive the domainComponent attribute, as defined in [RFC4519].
- The Domain Name System (DNS) provides a hierarchical resource
- labeling system. This attribute provides a convenient mechanism for
- organizations that wish to use DNs that parallel their DNS names.
- This is not a replacement for the dNSName component of the
- alternative name extensions. Implementations are not required to
-
-
-
-Cooper, et al. Standards Track [Page 21]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- convert such names into DNS names. The syntax and associated OID for
- this attribute type are provided in the ASN.1 modules in Appendix A.
- Rules for encoding internationalized domain names for use with the
- domainComponent attribute type are specified in Section 7.3.
-
- Certificate users MUST be prepared to process the issuer
- distinguished name and subject distinguished name (Section 4.1.2.6)
- fields to perform name chaining for certification path validation
- (Section 6). Name chaining is performed by matching the issuer
- distinguished name in one certificate with the subject name in a CA
- certificate. Rules for comparing distinguished names are specified
- in Section 7.1. If the names in the issuer and subject field in a
- certificate match according to the rules specified in Section 7.1,
- then the certificate is self-issued.
-
-4.1.2.5. Validity
-
- The certificate validity period is the time interval during which the
- CA warrants that it will maintain information about the status of the
- certificate. The field is represented as a SEQUENCE of two dates:
- the date on which the certificate validity period begins (notBefore)
- and the date on which the certificate validity period ends
- (notAfter). Both notBefore and notAfter may be encoded as UTCTime or
- GeneralizedTime.
-
- CAs conforming to this profile MUST always encode certificate
- validity dates through the year 2049 as UTCTime; certificate validity
- dates in 2050 or later MUST be encoded as GeneralizedTime.
- Conforming applications MUST be able to process validity dates that
- are encoded in either UTCTime or GeneralizedTime.
-
- The validity period for a certificate is the period of time from
- notBefore through notAfter, inclusive.
-
- In some situations, devices are given certificates for which no good
- expiration date can be assigned. For example, a device could be
- issued a certificate that binds its model and serial number to its
- public key; such a certificate is intended to be used for the entire
- lifetime of the device.
-
- To indicate that a certificate has no well-defined expiration date,
- the notAfter SHOULD be assigned the GeneralizedTime value of
- 99991231235959Z.
-
- When the issuer will not be able to maintain status information until
- the notAfter date (including when the notAfter date is
- 99991231235959Z), the issuer MUST ensure that no valid certification
- path exists for the certificate after maintenance of status
-
-
-
-Cooper, et al. Standards Track [Page 22]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- information is terminated. This may be accomplished by expiration or
- revocation of all CA certificates containing the public key used to
- verify the signature on the certificate and discontinuing use of the
- public key used to verify the signature on the certificate as a trust
- anchor.
-
-4.1.2.5.1. UTCTime
-
- The universal time type, UTCTime, is a standard ASN.1 type intended
- for representation of dates and time. UTCTime specifies the year
- through the two low-order digits and time is specified to the
- precision of one minute or one second. UTCTime includes either Z
- (for Zulu, or Greenwich Mean Time) or a time differential.
-
- For the purposes of this profile, UTCTime values MUST be expressed in
- Greenwich Mean Time (Zulu) and MUST include seconds (i.e., times are
- YYMMDDHHMMSSZ), even where the number of seconds is zero. Conforming
- systems MUST interpret the year field (YY) as follows:
-
- Where YY is greater than or equal to 50, the year SHALL be
- interpreted as 19YY; and
-
- Where YY is less than 50, the year SHALL be interpreted as 20YY.
-
-4.1.2.5.2. GeneralizedTime
-
- The generalized time type, GeneralizedTime, is a standard ASN.1 type
- for variable precision representation of time. Optionally, the
- GeneralizedTime field can include a representation of the time
- differential between local and Greenwich Mean Time.
-
- For the purposes of this profile, GeneralizedTime values MUST be
- expressed in Greenwich Mean Time (Zulu) and MUST include seconds
- (i.e., times are YYYYMMDDHHMMSSZ), even where the number of seconds
- is zero. GeneralizedTime values MUST NOT include fractional seconds.
-
-4.1.2.6. Subject
-
- The subject field identifies the entity associated with the public
- key stored in the subject public key field. The subject name MAY be
- carried in the subject field and/or the subjectAltName extension. If
- the subject is a CA (e.g., the basic constraints extension, as
- discussed in Section 4.2.1.9, is present and the value of cA is
- TRUE), then the subject field MUST be populated with a non-empty
- distinguished name matching the contents of the issuer field (Section
- 4.1.2.4) in all certificates issued by the subject CA. If the
- subject is a CRL issuer (e.g., the key usage extension, as discussed
- in Section 4.2.1.3, is present and the value of cRLSign is TRUE),
-
-
-
-Cooper, et al. Standards Track [Page 23]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- then the subject field MUST be populated with a non-empty
- distinguished name matching the contents of the issuer field (Section
- 5.1.2.3) in all CRLs issued by the subject CRL issuer. If subject
- naming information is present only in the subjectAltName extension
- (e.g., a key bound only to an email address or URI), then the subject
- name MUST be an empty sequence and the subjectAltName extension MUST
- be critical.
-
- Where it is non-empty, the subject field MUST contain an X.500
- distinguished name (DN). The DN MUST be unique for each subject
- entity certified by the one CA as defined by the issuer field. A CA
- MAY issue more than one certificate with the same DN to the same
- subject entity.
-
- The subject field is defined as the X.501 type Name. Implementation
- requirements for this field are those defined for the issuer field
- (Section 4.1.2.4). Implementations of this specification MUST be
- prepared to receive subject names containing the attribute types
- required for the issuer field. Implementations of this specification
- SHOULD be prepared to receive subject names containing the
- recommended attribute types for the issuer field. The syntax and
- associated object identifiers (OIDs) for these attribute types are
- provided in the ASN.1 modules in Appendix A. Implementations of this
- specification MAY use the comparison rules in Section 7.1 to process
- unfamiliar attribute types (i.e., for name chaining) whose attribute
- values use one of the encoding options from DirectoryString. Binary
- comparison should be used when unfamiliar attribute types include
- attribute values with encoding options other than those found in
- DirectoryString. This allows implementations to process certificates
- with unfamiliar attributes in the subject name.
-
- When encoding attribute values of type DirectoryString, conforming
- CAs MUST use PrintableString or UTF8String encoding, with the
- following exceptions:
-
- (a) When the subject of the certificate is a CA, the subject
- field MUST be encoded in the same way as it is encoded in the
- issuer field (Section 4.1.2.4) in all certificates issued by
- the subject CA. Thus, if the subject CA encodes attributes
- in the issuer fields of certificates that it issues using the
- TeletexString, BMPString, or UniversalString encodings, then
- the subject field of certificates issued to that CA MUST use
- the same encoding.
-
- (b) When the subject of the certificate is a CRL issuer, the
- subject field MUST be encoded in the same way as it is
- encoded in the issuer field (Section 5.1.2.3) in all CRLs
- issued by the subject CRL issuer.
-
-
-
-Cooper, et al. Standards Track [Page 24]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- (c) TeletexString, BMPString, and UniversalString are included
- for backward compatibility, and SHOULD NOT be used for
- certificates for new subjects. However, these types MAY be
- used in certificates where the name was previously
- established, including cases in which a new certificate is
- being issued to an existing subject or a certificate is being
- issued to a new subject where the attributes being encoded
- have been previously established in certificates issued to
- other subjects. Certificate users SHOULD be prepared to
- receive certificates with these types.
-
- Legacy implementations exist where an electronic mail address is
- embedded in the subject distinguished name as an emailAddress
- attribute [RFC2985]. The attribute value for emailAddress is of type
- IA5String to permit inclusion of the character '@', which is not part
- of the PrintableString character set. emailAddress attribute values
- are not case-sensitive (e.g., "subscriber@example.com" is the same as
- "SUBSCRIBER@EXAMPLE.COM").
-
- Conforming implementations generating new certificates with
- electronic mail addresses MUST use the rfc822Name in the subject
- alternative name extension (Section 4.2.1.6) to describe such
- identities. Simultaneous inclusion of the emailAddress attribute in
- the subject distinguished name to support legacy implementations is
- deprecated but permitted.
-
-4.1.2.7. Subject Public Key Info
-
- This field is used to carry the public key and identify the algorithm
- with which the key is used (e.g., RSA, DSA, or Diffie-Hellman). The
- algorithm is identified using the AlgorithmIdentifier structure
- specified in Section 4.1.1.2. The object identifiers for the
- supported algorithms and the methods for encoding the public key
- materials (public key and parameters) are specified in [RFC3279],
- [RFC4055], and [RFC4491].
-
-4.1.2.8. Unique Identifiers
-
- These fields MUST only appear if the version is 2 or 3 (Section
- 4.1.2.1). These fields MUST NOT appear if the version is 1. The
- subject and issuer unique identifiers are present in the certificate
- to handle the possibility of reuse of subject and/or issuer names
- over time. This profile RECOMMENDS that names not be reused for
- different entities and that Internet certificates not make use of
- unique identifiers. CAs conforming to this profile MUST NOT generate
- certificates with unique identifiers. Applications conforming to
-
-
-
-
-
-Cooper, et al. Standards Track [Page 25]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- this profile SHOULD be capable of parsing certificates that include
- unique identifiers, but there are no processing requirements
- associated with the unique identifiers.
-
-4.1.2.9. Extensions
-
- This field MUST only appear if the version is 3 (Section 4.1.2.1).
- If present, this field is a SEQUENCE of one or more certificate
- extensions. The format and content of certificate extensions in the
- Internet PKI are defined in Section 4.2.
-
-4.2. Certificate Extensions
-
- The extensions defined for X.509 v3 certificates provide methods for
- associating additional attributes with users or public keys and for
- managing relationships between CAs. The X.509 v3 certificate format
- also allows communities to define private extensions to carry
- information unique to those communities. Each extension in a
- certificate is designated as either critical or non-critical. A
- certificate-using system MUST reject the certificate if it encounters
- a critical extension it does not recognize or a critical extension
- that contains information that it cannot process. A non-critical
- extension MAY be ignored if it is not recognized, but MUST be
- processed if it is recognized. The following sections present
- recommended extensions used within Internet certificates and standard
- locations for information. Communities may elect to use additional
- extensions; however, caution ought to be exercised in adopting any
- critical extensions in certificates that might prevent use in a
- general context.
-
- Each extension includes an OID and an ASN.1 structure. When an
- extension appears in a certificate, the OID appears as the field
- extnID and the corresponding ASN.1 DER encoded structure is the value
- of the octet string extnValue. A certificate MUST NOT include more
- than one instance of a particular extension. For example, a
- certificate may contain only one authority key identifier extension
- (Section 4.2.1.1). An extension includes the boolean critical, with
- a default value of FALSE. The text for each extension specifies the
- acceptable values for the critical field for CAs conforming to this
- profile.
-
- Conforming CAs MUST support key identifiers (Sections 4.2.1.1 and
- 4.2.1.2), basic constraints (Section 4.2.1.9), key usage (Section
- 4.2.1.3), and certificate policies (Section 4.2.1.4) extensions. If
- the CA issues certificates with an empty sequence for the subject
- field, the CA MUST support the subject alternative name extension
- (Section 4.2.1.6). Support for the remaining extensions is OPTIONAL.
- Conforming CAs MAY support extensions that are not identified within
-
-
-
-Cooper, et al. Standards Track [Page 26]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- this specification; certificate issuers are cautioned that marking
- such extensions as critical may inhibit interoperability.
-
- At a minimum, applications conforming to this profile MUST recognize
- the following extensions: key usage (Section 4.2.1.3), certificate
- policies (Section 4.2.1.4), subject alternative name (Section
- 4.2.1.6), basic constraints (Section 4.2.1.9), name constraints
- (Section 4.2.1.10), policy constraints (Section 4.2.1.11), extended
- key usage (Section 4.2.1.12), and inhibit anyPolicy (Section
- 4.2.1.14).
-
- In addition, applications conforming to this profile SHOULD recognize
- the authority and subject key identifier (Sections 4.2.1.1 and
- 4.2.1.2) and policy mappings (Section 4.2.1.5) extensions.
-
-4.2.1. Standard Extensions
-
- This section identifies standard certificate extensions defined in
- [X.509] for use in the Internet PKI. Each extension is associated
- with an OID defined in [X.509]. These OIDs are members of the id-ce
- arc, which is defined by the following:
-
- id-ce OBJECT IDENTIFIER ::= { joint-iso-ccitt(2) ds(5) 29 }
-
-4.2.1.1. Authority Key Identifier
-
- The authority key identifier extension provides a means of
- identifying the public key corresponding to the private key used to
- sign a certificate. This extension is used where an issuer has
- multiple signing keys (either due to multiple concurrent key pairs or
- due to changeover). The identification MAY be based on either the
- key identifier (the subject key identifier in the issuer's
- certificate) or the issuer name and serial number.
-
- The keyIdentifier field of the authorityKeyIdentifier extension MUST
- be included in all certificates generated by conforming CAs to
- facilitate certification path construction. There is one exception;
- where a CA distributes its public key in the form of a "self-signed"
- certificate, the authority key identifier MAY be omitted. The
- signature on a self-signed certificate is generated with the private
- key associated with the certificate's subject public key. (This
- proves that the issuer possesses both the public and private keys.)
- In this case, the subject and authority key identifiers would be
- identical, but only the subject key identifier is needed for
- certification path building.
-
- The value of the keyIdentifier field SHOULD be derived from the
- public key used to verify the certificate's signature or a method
-
-
-
-Cooper, et al. Standards Track [Page 27]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- that generates unique values. Two common methods for generating key
- identifiers from the public key are described in Section 4.2.1.2.
- Where a key identifier has not been previously established, this
- specification RECOMMENDS use of one of these methods for generating
- keyIdentifiers or use of a similar method that uses a different hash
- algorithm. Where a key identifier has been previously established,
- the CA SHOULD use the previously established identifier.
-
- This profile RECOMMENDS support for the key identifier method by all
- certificate users.
-
- Conforming CAs MUST mark this extension as non-critical.
-
- id-ce-authorityKeyIdentifier OBJECT IDENTIFIER ::= { id-ce 35 }
-
- AuthorityKeyIdentifier ::= SEQUENCE {
- keyIdentifier [0] KeyIdentifier OPTIONAL,
- authorityCertIssuer [1] GeneralNames OPTIONAL,
- authorityCertSerialNumber [2] CertificateSerialNumber OPTIONAL }
-
- KeyIdentifier ::= OCTET STRING
-
-4.2.1.2. Subject Key Identifier
-
- The subject key identifier extension provides a means of identifying
- certificates that contain a particular public key.
-
- To facilitate certification path construction, this extension MUST
- appear in all conforming CA certificates, that is, all certificates
- including the basic constraints extension (Section 4.2.1.9) where the
- value of cA is TRUE. In conforming CA certificates, the value of the
- subject key identifier MUST be the value placed in the key identifier
- field of the authority key identifier extension (Section 4.2.1.1) of
- certificates issued by the subject of this certificate. Applications
- are not required to verify that key identifiers match when performing
- certification path validation.
-
- For CA certificates, subject key identifiers SHOULD be derived from
- the public key or a method that generates unique values. Two common
- methods for generating key identifiers from the public key are:
-
- (1) The keyIdentifier is composed of the 160-bit SHA-1 hash of the
- value of the BIT STRING subjectPublicKey (excluding the tag,
- length, and number of unused bits).
-
-
-
-
-
-
-
-Cooper, et al. Standards Track [Page 28]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- (2) The keyIdentifier is composed of a four-bit type field with
- the value 0100 followed by the least significant 60 bits of
- the SHA-1 hash of the value of the BIT STRING
- subjectPublicKey (excluding the tag, length, and number of
- unused bits).
-
- Other methods of generating unique numbers are also acceptable.
-
- For end entity certificates, the subject key identifier extension
- provides a means for identifying certificates containing the
- particular public key used in an application. Where an end entity
- has obtained multiple certificates, especially from multiple CAs, the
- subject key identifier provides a means to quickly identify the set
- of certificates containing a particular public key. To assist
- applications in identifying the appropriate end entity certificate,
- this extension SHOULD be included in all end entity certificates.
-
- For end entity certificates, subject key identifiers SHOULD be
- derived from the public key. Two common methods for generating key
- identifiers from the public key are identified above.
-
- Where a key identifier has not been previously established, this
- specification RECOMMENDS use of one of these methods for generating
- keyIdentifiers or use of a similar method that uses a different hash
- algorithm. Where a key identifier has been previously established,
- the CA SHOULD use the previously established identifier.
-
- Conforming CAs MUST mark this extension as non-critical.
-
- id-ce-subjectKeyIdentifier OBJECT IDENTIFIER ::= { id-ce 14 }
-
- SubjectKeyIdentifier ::= KeyIdentifier
-
-4.2.1.3. Key Usage
-
- The key usage extension defines the purpose (e.g., encipherment,
- signature, certificate signing) of the key contained in the
- certificate. The usage restriction might be employed when a key that
- could be used for more than one operation is to be restricted. For
- example, when an RSA key should be used only to verify signatures on
- objects other than public key certificates and CRLs, the
- digitalSignature and/or nonRepudiation bits would be asserted.
- Likewise, when an RSA key should be used only for key management, the
- keyEncipherment bit would be asserted.
-
-
-
-
-
-
-
-Cooper, et al. Standards Track [Page 29]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- Conforming CAs MUST include this extension in certificates that
- contain public keys that are used to validate digital signatures on
- other public key certificates or CRLs. When present, conforming CAs
- SHOULD mark this extension as critical.
-
- id-ce-keyUsage OBJECT IDENTIFIER ::= { id-ce 15 }
-
- KeyUsage ::= BIT STRING {
- digitalSignature (0),
- nonRepudiation (1), -- recent editions of X.509 have
- -- renamed this bit to contentCommitment
- keyEncipherment (2),
- dataEncipherment (3),
- keyAgreement (4),
- keyCertSign (5),
- cRLSign (6),
- encipherOnly (7),
- decipherOnly (8) }
-
- Bits in the KeyUsage type are used as follows:
-
- The digitalSignature bit is asserted when the subject public key
- is used for verifying digital signatures, other than signatures on
- certificates (bit 5) and CRLs (bit 6), such as those used in an
- entity authentication service, a data origin authentication
- service, and/or an integrity service.
-
- The nonRepudiation bit is asserted when the subject public key is
- used to verify digital signatures, other than signatures on
- certificates (bit 5) and CRLs (bit 6), used to provide a non-
- repudiation service that protects against the signing entity
- falsely denying some action. In the case of later conflict, a
- reliable third party may determine the authenticity of the signed
- data. (Note that recent editions of X.509 have renamed the
- nonRepudiation bit to contentCommitment.)
-
- The keyEncipherment bit is asserted when the subject public key is
- used for enciphering private or secret keys, i.e., for key
- transport. For example, this bit shall be set when an RSA public
- key is to be used for encrypting a symmetric content-decryption
- key or an asymmetric private key.
-
- The dataEncipherment bit is asserted when the subject public key
- is used for directly enciphering raw user data without the use of
- an intermediate symmetric cipher. Note that the use of this bit
- is extremely uncommon; almost all applications use key transport
- or key agreement to establish a symmetric key.
-
-
-
-
-Cooper, et al. Standards Track [Page 30]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- The keyAgreement bit is asserted when the subject public key is
- used for key agreement. For example, when a Diffie-Hellman key is
- to be used for key management, then this bit is set.
-
- The keyCertSign bit is asserted when the subject public key is
- used for verifying signatures on public key certificates. If the
- keyCertSign bit is asserted, then the cA bit in the basic
- constraints extension (Section 4.2.1.9) MUST also be asserted.
-
- The cRLSign bit is asserted when the subject public key is used
- for verifying signatures on certificate revocation lists (e.g.,
- CRLs, delta CRLs, or ARLs).
-
- The meaning of the encipherOnly bit is undefined in the absence of
- the keyAgreement bit. When the encipherOnly bit is asserted and
- the keyAgreement bit is also set, the subject public key may be
- used only for enciphering data while performing key agreement.
-
- The meaning of the decipherOnly bit is undefined in the absence of
- the keyAgreement bit. When the decipherOnly bit is asserted and
- the keyAgreement bit is also set, the subject public key may be
- used only for deciphering data while performing key agreement.
-
- If the keyUsage extension is present, then the subject public key
- MUST NOT be used to verify signatures on certificates or CRLs unless
- the corresponding keyCertSign or cRLSign bit is set. If the subject
- public key is only to be used for verifying signatures on
- certificates and/or CRLs, then the digitalSignature and
- nonRepudiation bits SHOULD NOT be set. However, the digitalSignature
- and/or nonRepudiation bits MAY be set in addition to the keyCertSign
- and/or cRLSign bits if the subject public key is to be used to verify
- signatures on certificates and/or CRLs as well as other objects.
-
- Combining the nonRepudiation bit in the keyUsage certificate
- extension with other keyUsage bits may have security implications
- depending on the context in which the certificate is to be used.
- Further distinctions between the digitalSignature and nonRepudiation
- bits may be provided in specific certificate policies.
-
- This profile does not restrict the combinations of bits that may be
- set in an instantiation of the keyUsage extension. However,
- appropriate values for keyUsage extensions for particular algorithms
- are specified in [RFC3279], [RFC4055], and [RFC4491]. When the
- keyUsage extension appears in a certificate, at least one of the bits
- MUST be set to 1.
-
-
-
-
-
-
-Cooper, et al. Standards Track [Page 31]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
-4.2.1.4. Certificate Policies
-
- The certificate policies extension contains a sequence of one or more
- policy information terms, each of which consists of an object
- identifier (OID) and optional qualifiers. Optional qualifiers, which
- MAY be present, are not expected to change the definition of the
- policy. A certificate policy OID MUST NOT appear more than once in a
- certificate policies extension.
-
- In an end entity certificate, these policy information terms indicate
- the policy under which the certificate has been issued and the
- purposes for which the certificate may be used. In a CA certificate,
- these policy information terms limit the set of policies for
- certification paths that include this certificate. When a CA does
- not wish to limit the set of policies for certification paths that
- include this certificate, it MAY assert the special policy anyPolicy,
- with a value of { 2 5 29 32 0 }.
-
- Applications with specific policy requirements are expected to have a
- list of those policies that they will accept and to compare the
- policy OIDs in the certificate to that list. If this extension is
- critical, the path validation software MUST be able to interpret this
- extension (including the optional qualifier), or MUST reject the
- certificate.
-
- To promote interoperability, this profile RECOMMENDS that policy
- information terms consist of only an OID. Where an OID alone is
- insufficient, this profile strongly recommends that the use of
- qualifiers be limited to those identified in this section. When
- qualifiers are used with the special policy anyPolicy, they MUST be
- limited to the qualifiers identified in this section. Only those
- qualifiers returned as a result of path validation are considered.
-
- This specification defines two policy qualifier types for use by
- certificate policy writers and certificate issuers. The qualifier
- types are the CPS Pointer and User Notice qualifiers.
-
- The CPS Pointer qualifier contains a pointer to a Certification
- Practice Statement (CPS) published by the CA. The pointer is in the
- form of a URI. Processing requirements for this qualifier are a
- local matter. No action is mandated by this specification regardless
- of the criticality value asserted for the extension.
-
- User notice is intended for display to a relying party when a
- certificate is used. Only user notices returned as a result of path
- validation are intended for display to the user. If a notice is
-
-
-
-
-
-Cooper, et al. Standards Track [Page 32]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- duplicated, only one copy need be displayed. To prevent such
- duplication, this qualifier SHOULD only be present in end entity
- certificates and CA certificates issued to other organizations.
-
- The user notice has two optional fields: the noticeRef field and the
- explicitText field. Conforming CAs SHOULD NOT use the noticeRef
- option.
-
- The noticeRef field, if used, names an organization and
- identifies, by number, a particular textual statement prepared by
- that organization. For example, it might identify the
- organization "CertsRUs" and notice number 1. In a typical
- implementation, the application software will have a notice file
- containing the current set of notices for CertsRUs; the
- application will extract the notice text from the file and display
- it. Messages MAY be multilingual, allowing the software to select
- the particular language message for its own environment.
-
- An explicitText field includes the textual statement directly in
- the certificate. The explicitText field is a string with a
- maximum size of 200 characters. Conforming CAs SHOULD use the
- UTF8String encoding for explicitText, but MAY use IA5String.
- Conforming CAs MUST NOT encode explicitText as VisibleString or
- BMPString. The explicitText string SHOULD NOT include any control
- characters (e.g., U+0000 to U+001F and U+007F to U+009F). When
- the UTF8String encoding is used, all character sequences SHOULD be
- normalized according to Unicode normalization form C (NFC) [NFC].
-
- If both the noticeRef and explicitText options are included in the
- one qualifier and if the application software can locate the notice
- text indicated by the noticeRef option, then that text SHOULD be
- displayed; otherwise, the explicitText string SHOULD be displayed.
-
- Note: While the explicitText has a maximum size of 200 characters,
- some non-conforming CAs exceed this limit. Therefore, certificate
- users SHOULD gracefully handle explicitText with more than 200
- characters.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Cooper, et al. Standards Track [Page 33]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- id-ce-certificatePolicies OBJECT IDENTIFIER ::= { id-ce 32 }
-
- anyPolicy OBJECT IDENTIFIER ::= { id-ce-certificatePolicies 0 }
-
- certificatePolicies ::= SEQUENCE SIZE (1..MAX) OF PolicyInformation
-
- PolicyInformation ::= SEQUENCE {
- policyIdentifier CertPolicyId,
- policyQualifiers SEQUENCE SIZE (1..MAX) OF
- PolicyQualifierInfo OPTIONAL }
-
- CertPolicyId ::= OBJECT IDENTIFIER
-
- PolicyQualifierInfo ::= SEQUENCE {
- policyQualifierId PolicyQualifierId,
- qualifier ANY DEFINED BY policyQualifierId }
-
- -- policyQualifierIds for Internet policy qualifiers
-
- id-qt OBJECT IDENTIFIER ::= { id-pkix 2 }
- id-qt-cps OBJECT IDENTIFIER ::= { id-qt 1 }
- id-qt-unotice OBJECT IDENTIFIER ::= { id-qt 2 }
-
- PolicyQualifierId ::= OBJECT IDENTIFIER ( id-qt-cps | id-qt-unotice )
-
- Qualifier ::= CHOICE {
- cPSuri CPSuri,
- userNotice UserNotice }
-
- CPSuri ::= IA5String
-
- UserNotice ::= SEQUENCE {
- noticeRef NoticeReference OPTIONAL,
- explicitText DisplayText OPTIONAL }
-
- NoticeReference ::= SEQUENCE {
- organization DisplayText,
- noticeNumbers SEQUENCE OF INTEGER }
-
- DisplayText ::= CHOICE {
- ia5String IA5String (SIZE (1..200)),
- visibleString VisibleString (SIZE (1..200)),
- bmpString BMPString (SIZE (1..200)),
- utf8String UTF8String (SIZE (1..200)) }
-
-
-
-
-
-
-
-Cooper, et al. Standards Track [Page 34]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
-4.2.1.5. Policy Mappings
-
- This extension is used in CA certificates. It lists one or more
- pairs of OIDs; each pair includes an issuerDomainPolicy and a
- subjectDomainPolicy. The pairing indicates the issuing CA considers
- its issuerDomainPolicy equivalent to the subject CA's
- subjectDomainPolicy.
-
- The issuing CA's users might accept an issuerDomainPolicy for certain
- applications. The policy mapping defines the list of policies
- associated with the subject CA that may be accepted as comparable to
- the issuerDomainPolicy.
-
- Each issuerDomainPolicy named in the policy mappings extension SHOULD
- also be asserted in a certificate policies extension in the same
- certificate. Policies MUST NOT be mapped either to or from the
- special value anyPolicy (Section 4.2.1.4).
-
- In general, certificate policies that appear in the
- issuerDomainPolicy field of the policy mappings extension are not
- considered acceptable policies for inclusion in subsequent
- certificates in the certification path. In some circumstances, a CA
- may wish to map from one policy (p1) to another (p2), but still wants
- the issuerDomainPolicy (p1) to be considered acceptable for inclusion
- in subsequent certificates. This may occur, for example, if the CA
- is in the process of transitioning from the use of policy p1 to the
- use of policy p2 and has valid certificates that were issued under
- each of the policies. A CA may indicate this by including two policy
- mappings in the CA certificates that it issues. Each policy mapping
- would have an issuerDomainPolicy of p1; one policy mapping would have
- a subjectDomainPolicy of p1 and the other would have a
- subjectDomainPolicy of p2.
-
- This extension MAY be supported by CAs and/or applications.
- Conforming CAs SHOULD mark this extension as critical.
-
- id-ce-policyMappings OBJECT IDENTIFIER ::= { id-ce 33 }
-
- PolicyMappings ::= SEQUENCE SIZE (1..MAX) OF SEQUENCE {
- issuerDomainPolicy CertPolicyId,
- subjectDomainPolicy CertPolicyId }
-
-4.2.1.6. Subject Alternative Name
-
- The subject alternative name extension allows identities to be bound
- to the subject of the certificate. These identities may be included
- in addition to or in place of the identity in the subject field of
- the certificate. Defined options include an Internet electronic mail
-
-
-
-Cooper, et al. Standards Track [Page 35]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- address, a DNS name, an IP address, and a Uniform Resource Identifier
- (URI). Other options exist, including completely local definitions.
- Multiple name forms, and multiple instances of each name form, MAY be
- included. Whenever such identities are to be bound into a
- certificate, the subject alternative name (or issuer alternative
- name) extension MUST be used; however, a DNS name MAY also be
- represented in the subject field using the domainComponent attribute
- as described in Section 4.1.2.4. Note that where such names are
- represented in the subject field implementations are not required to
- convert them into DNS names.
-
- Because the subject alternative name is considered to be definitively
- bound to the public key, all parts of the subject alternative name
- MUST be verified by the CA.
-
- Further, if the only subject identity included in the certificate is
- an alternative name form (e.g., an electronic mail address), then the
- subject distinguished name MUST be empty (an empty sequence), and the
- subjectAltName extension MUST be present. If the subject field
- contains an empty sequence, then the issuing CA MUST include a
- subjectAltName extension that is marked as critical. When including
- the subjectAltName extension in a certificate that has a non-empty
- subject distinguished name, conforming CAs SHOULD mark the
- subjectAltName extension as non-critical.
-
- When the subjectAltName extension contains an Internet mail address,
- the address MUST be stored in the rfc822Name. The format of an
- rfc822Name is a "Mailbox" as defined in Section 4.1.2 of [RFC2821].
- A Mailbox has the form "Local-part@Domain". Note that a Mailbox has
- no phrase (such as a common name) before it, has no comment (text
- surrounded in parentheses) after it, and is not surrounded by "<" and
- ">". Rules for encoding Internet mail addresses that include
- internationalized domain names are specified in Section 7.5.
-
- When the subjectAltName extension contains an iPAddress, the address
- MUST be stored in the octet string in "network byte order", as
- specified in [RFC791]. The least significant bit (LSB) of each octet
- is the LSB of the corresponding byte in the network address. For IP
- version 4, as specified in [RFC791], the octet string MUST contain
- exactly four octets. For IP version 6, as specified in
- [RFC2460], the octet string MUST contain exactly sixteen octets.
-
- When the subjectAltName extension contains a domain name system
- label, the domain name MUST be stored in the dNSName (an IA5String).
- The name MUST be in the "preferred name syntax", as specified by
- Section 3.5 of [RFC1034] and as modified by Section 2.1 of
- [RFC1123]. Note that while uppercase and lowercase letters are
- allowed in domain names, no significance is attached to the case. In
-
-
-
-Cooper, et al. Standards Track [Page 36]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- addition, while the string " " is a legal domain name, subjectAltName
- extensions with a dNSName of " " MUST NOT be used. Finally, the use
- of the DNS representation for Internet mail addresses
- (subscriber.example.com instead of subscriber@example.com) MUST NOT
- be used; such identities are to be encoded as rfc822Name. Rules for
- encoding internationalized domain names are specified in Section 7.2.
-
- When the subjectAltName extension contains a URI, the name MUST be
- stored in the uniformResourceIdentifier (an IA5String). The name
- MUST NOT be a relative URI, and it MUST follow the URI syntax and
- encoding rules specified in [RFC3986]. The name MUST include both a
- scheme (e.g., "http" or "ftp") and a scheme-specific-part. URIs that
- include an authority ([RFC3986], Section 3.2) MUST include a fully
- qualified domain name or IP address as the host. Rules for encoding
- Internationalized Resource Identifiers (IRIs) are specified in
- Section 7.4.
-
- As specified in [RFC3986], the scheme name is not case-sensitive
- (e.g., "http" is equivalent to "HTTP"). The host part, if present,
- is also not case-sensitive, but other components of the scheme-
- specific-part may be case-sensitive. Rules for comparing URIs are
- specified in Section 7.4.
-
- When the subjectAltName extension contains a DN in the directoryName,
- the encoding rules are the same as those specified for the issuer
- field in Section 4.1.2.4. The DN MUST be unique for each subject
- entity certified by the one CA as defined by the issuer field. A CA
- MAY issue more than one certificate with the same DN to the same
- subject entity.
-
- The subjectAltName MAY carry additional name types through the use of
- the otherName field. The format and semantics of the name are
- indicated through the OBJECT IDENTIFIER in the type-id field. The
- name itself is conveyed as value field in otherName. For example,
- Kerberos [RFC4120] format names can be encoded into the otherName,
- using a Kerberos 5 principal name OID and a SEQUENCE of the Realm and
- the PrincipalName.
-
- Subject alternative names MAY be constrained in the same manner as
- subject distinguished names using the name constraints extension as
- described in Section 4.2.1.10.
-
- If the subjectAltName extension is present, the sequence MUST contain
- at least one entry. Unlike the subject field, conforming CAs MUST
- NOT issue certificates with subjectAltNames containing empty
- GeneralName fields. For example, an rfc822Name is represented as an
- IA5String. While an empty string is a valid IA5String, such an
- rfc822Name is not permitted by this profile. The behavior of clients
-
-
-
-Cooper, et al. Standards Track [Page 37]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- that encounter such a certificate when processing a certification
- path is not defined by this profile.
-
- Finally, the semantics of subject alternative names that include
- wildcard characters (e.g., as a placeholder for a set of names) are
- not addressed by this specification. Applications with specific
- requirements MAY use such names, but they must define the semantics.
-
- id-ce-subjectAltName OBJECT IDENTIFIER ::= { id-ce 17 }
-
- SubjectAltName ::= GeneralNames
-
- GeneralNames ::= SEQUENCE SIZE (1..MAX) OF GeneralName
-
- GeneralName ::= CHOICE {
- otherName [0] OtherName,
- rfc822Name [1] IA5String,
- dNSName [2] IA5String,
- x400Address [3] ORAddress,
- directoryName [4] Name,
- ediPartyName [5] EDIPartyName,
- uniformResourceIdentifier [6] IA5String,
- iPAddress [7] OCTET STRING,
- registeredID [8] OBJECT IDENTIFIER }
-
- OtherName ::= SEQUENCE {
- type-id OBJECT IDENTIFIER,
- value [0] EXPLICIT ANY DEFINED BY type-id }
-
- EDIPartyName ::= SEQUENCE {
- nameAssigner [0] DirectoryString OPTIONAL,
- partyName [1] DirectoryString }
-
-4.2.1.7. Issuer Alternative Name
-
- As with Section 4.2.1.6, this extension is used to associate Internet
- style identities with the certificate issuer. Issuer alternative
- name MUST be encoded as in 4.2.1.6. Issuer alternative names are not
- processed as part of the certification path validation algorithm in
- Section 6. (That is, issuer alternative names are not used in name
- chaining and name constraints are not enforced.)
-
- Where present, conforming CAs SHOULD mark this extension as non-
- critical.
-
- id-ce-issuerAltName OBJECT IDENTIFIER ::= { id-ce 18 }
-
- IssuerAltName ::= GeneralNames
-
-
-
-Cooper, et al. Standards Track [Page 38]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
-4.2.1.8. Subject Directory Attributes
-
- The subject directory attributes extension is used to convey
- identification attributes (e.g., nationality) of the subject. The
- extension is defined as a sequence of one or more attributes.
- Conforming CAs MUST mark this extension as non-critical.
-
- id-ce-subjectDirectoryAttributes OBJECT IDENTIFIER ::= { id-ce 9 }
-
- SubjectDirectoryAttributes ::= SEQUENCE SIZE (1..MAX) OF Attribute
-
-4.2.1.9. Basic Constraints
-
- The basic constraints extension identifies whether the subject of the
- certificate is a CA and the maximum depth of valid certification
- paths that include this certificate.
-
- The cA boolean indicates whether the certified public key may be used
- to verify certificate signatures. If the cA boolean is not asserted,
- then the keyCertSign bit in the key usage extension MUST NOT be
- asserted. If the basic constraints extension is not present in a
- version 3 certificate, or the extension is present but the cA boolean
- is not asserted, then the certified public key MUST NOT be used to
- verify certificate signatures.
-
- The pathLenConstraint field is meaningful only if the cA boolean is
- asserted and the key usage extension, if present, asserts the
- keyCertSign bit (Section 4.2.1.3). In this case, it gives the
- maximum number of non-self-issued intermediate certificates that may
- follow this certificate in a valid certification path. (Note: The
- last certificate in the certification path is not an intermediate
- certificate, and is not included in this limit. Usually, the last
- certificate is an end entity certificate, but it can be a CA
- certificate.) A pathLenConstraint of zero indicates that no non-
- self-issued intermediate CA certificates may follow in a valid
- certification path. Where it appears, the pathLenConstraint field
- MUST be greater than or equal to zero. Where pathLenConstraint does
- not appear, no limit is imposed.
-
- Conforming CAs MUST include this extension in all CA certificates
- that contain public keys used to validate digital signatures on
- certificates and MUST mark the extension as critical in such
- certificates. This extension MAY appear as a critical or non-
- critical extension in CA certificates that contain public keys used
- exclusively for purposes other than validating digital signatures on
- certificates. Such CA certificates include ones that contain public
- keys used exclusively for validating digital signatures on CRLs and
- ones that contain key management public keys used with certificate
-
-
-
-Cooper, et al. Standards Track [Page 39]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- enrollment protocols. This extension MAY appear as a critical or
- non-critical extension in end entity certificates.
-
- CAs MUST NOT include the pathLenConstraint field unless the cA
- boolean is asserted and the key usage extension asserts the
- keyCertSign bit.
-
- id-ce-basicConstraints OBJECT IDENTIFIER ::= { id-ce 19 }
-
- BasicConstraints ::= SEQUENCE {
- cA BOOLEAN DEFAULT FALSE,
- pathLenConstraint INTEGER (0..MAX) OPTIONAL }
-
-4.2.1.10. Name Constraints
-
- The name constraints extension, which MUST be used only in a CA
- certificate, indicates a name space within which all subject names in
- subsequent certificates in a certification path MUST be located.
- Restrictions apply to the subject distinguished name and apply to
- subject alternative names. Restrictions apply only when the
- specified name form is present. If no name of the type is in the
- certificate, the certificate is acceptable.
-
- Name constraints are not applied to self-issued certificates (unless
- the certificate is the final certificate in the path). (This could
- prevent CAs that use name constraints from employing self-issued
- certificates to implement key rollover.)
-
- Restrictions are defined in terms of permitted or excluded name
- subtrees. Any name matching a restriction in the excludedSubtrees
- field is invalid regardless of information appearing in the
- permittedSubtrees. Conforming CAs MUST mark this extension as
- critical and SHOULD NOT impose name constraints on the x400Address,
- ediPartyName, or registeredID name forms. Conforming CAs MUST NOT
- issue certificates where name constraints is an empty sequence. That
- is, either the permittedSubtrees field or the excludedSubtrees MUST
- be present.
-
- Applications conforming to this profile MUST be able to process name
- constraints that are imposed on the directoryName name form and
- SHOULD be able to process name constraints that are imposed on the
- rfc822Name, uniformResourceIdentifier, dNSName, and iPAddress name
- forms. If a name constraints extension that is marked as critical
- imposes constraints on a particular name form, and an instance of
- that name form appears in the subject field or subjectAltName
- extension of a subsequent certificate, then the application MUST
- either process the constraint or reject the certificate.
-
-
-
-
-Cooper, et al. Standards Track [Page 40]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- Within this profile, the minimum and maximum fields are not used with
- any name forms, thus, the minimum MUST be zero, and maximum MUST be
- absent. However, if an application encounters a critical name
- constraints extension that specifies other values for minimum or
- maximum for a name form that appears in a subsequent certificate, the
- application MUST either process these fields or reject the
- certificate.
-
- For URIs, the constraint applies to the host part of the name. The
- constraint MUST be specified as a fully qualified domain name and MAY
- specify a host or a domain. Examples would be "host.example.com" and
- ".example.com". When the constraint begins with a period, it MAY be
- expanded with one or more labels. That is, the constraint
- ".example.com" is satisfied by both host.example.com and
- my.host.example.com. However, the constraint ".example.com" is not
- satisfied by "example.com". When the constraint does not begin with
- a period, it specifies a host. If a constraint is applied to the
- uniformResourceIdentifier name form and a subsequent certificate
- includes a subjectAltName extension with a uniformResourceIdentifier
- that does not include an authority component with a host name
- specified as a fully qualified domain name (e.g., if the URI either
- does not include an authority component or includes an authority
- component in which the host name is specified as an IP address), then
- the application MUST reject the certificate.
-
- A name constraint for Internet mail addresses MAY specify a
- particular mailbox, all addresses at a particular host, or all
- mailboxes in a domain. To indicate a particular mailbox, the
- constraint is the complete mail address. For example,
- "root@example.com" indicates the root mailbox on the host
- "example.com". To indicate all Internet mail addresses on a
- particular host, the constraint is specified as the host name. For
- example, the constraint "example.com" is satisfied by any mail
- address at the host "example.com". To specify any address within a
- domain, the constraint is specified with a leading period (as with
- URIs). For example, ".example.com" indicates all the Internet mail
- addresses in the domain "example.com", but not Internet mail
- addresses on the host "example.com".
-
- DNS name restrictions are expressed as host.example.com. Any DNS
- name that can be constructed by simply adding zero or more labels to
- the left-hand side of the name satisfies the name constraint. For
- example, www.host.example.com would satisfy the constraint but
- host1.example.com would not.
-
- Legacy implementations exist where an electronic mail address is
- embedded in the subject distinguished name in an attribute of type
- emailAddress (Section 4.1.2.6). When constraints are imposed on the
-
-
-
-Cooper, et al. Standards Track [Page 41]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- rfc822Name name form, but the certificate does not include a subject
- alternative name, the rfc822Name constraint MUST be applied to the
- attribute of type emailAddress in the subject distinguished name.
- The ASN.1 syntax for emailAddress and the corresponding OID are
- supplied in Appendix A.
-
- Restrictions of the form directoryName MUST be applied to the subject
- field in the certificate (when the certificate includes a non-empty
- subject field) and to any names of type directoryName in the
- subjectAltName extension. Restrictions of the form x400Address MUST
- be applied to any names of type x400Address in the subjectAltName
- extension.
-
- When applying restrictions of the form directoryName, an
- implementation MUST compare DN attributes. At a minimum,
- implementations MUST perform the DN comparison rules specified in
- Section 7.1. CAs issuing certificates with a restriction of the form
- directoryName SHOULD NOT rely on implementation of the full ISO DN
- name comparison algorithm. This implies name restrictions MUST be
- stated identically to the encoding used in the subject field or
- subjectAltName extension.
-
- The syntax of iPAddress MUST be as described in Section 4.2.1.6 with
- the following additions specifically for name constraints. For IPv4
- addresses, the iPAddress field of GeneralName MUST contain eight (8)
- octets, encoded in the style of RFC 4632 (CIDR) to represent an
- address range [RFC4632]. For IPv6 addresses, the iPAddress field
- MUST contain 32 octets similarly encoded. For example, a name
- constraint for "class C" subnet 192.0.2.0 is represented as the
- octets C0 00 02 00 FF FF FF 00, representing the CIDR notation
- 192.0.2.0/24 (mask 255.255.255.0).
-
- Additional rules for encoding and processing name constraints are
- specified in Section 7.
-
- The syntax and semantics for name constraints for otherName,
- ediPartyName, and registeredID are not defined by this specification,
- however, syntax and semantics for name constraints for other name
- forms may be specified in other documents.
-
- id-ce-nameConstraints OBJECT IDENTIFIER ::= { id-ce 30 }
-
- NameConstraints ::= SEQUENCE {
- permittedSubtrees [0] GeneralSubtrees OPTIONAL,
- excludedSubtrees [1] GeneralSubtrees OPTIONAL }
-
- GeneralSubtrees ::= SEQUENCE SIZE (1..MAX) OF GeneralSubtree
-
-
-
-
-Cooper, et al. Standards Track [Page 42]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- GeneralSubtree ::= SEQUENCE {
- base GeneralName,
- minimum [0] BaseDistance DEFAULT 0,
- maximum [1] BaseDistance OPTIONAL }
-
- BaseDistance ::= INTEGER (0..MAX)
-
-4.2.1.11. Policy Constraints
-
- The policy constraints extension can be used in certificates issued
- to CAs. The policy constraints extension constrains path validation
- in two ways. It can be used to prohibit policy mapping or require
- that each certificate in a path contain an acceptable policy
- identifier.
-
- If the inhibitPolicyMapping field is present, the value indicates the
- number of additional certificates that may appear in the path before
- policy mapping is no longer permitted. For example, a value of one
- indicates that policy mapping may be processed in certificates issued
- by the subject of this certificate, but not in additional
- certificates in the path.
-
- If the requireExplicitPolicy field is present, the value of
- requireExplicitPolicy indicates the number of additional certificates
- that may appear in the path before an explicit policy is required for
- the entire path. When an explicit policy is required, it is
- necessary for all certificates in the path to contain an acceptable
- policy identifier in the certificate policies extension. An
- acceptable policy identifier is the identifier of a policy required
- by the user of the certification path or the identifier of a policy
- that has been declared equivalent through policy mapping.
-
- Conforming applications MUST be able to process the
- requireExplicitPolicy field and SHOULD be able to process the
- inhibitPolicyMapping field. Applications that support the
- inhibitPolicyMapping field MUST also implement support for the
- policyMappings extension. If the policyConstraints extension is
- marked as critical and the inhibitPolicyMapping field is present,
- applications that do not implement support for the
- inhibitPolicyMapping field MUST reject the certificate.
-
- Conforming CAs MUST NOT issue certificates where policy constraints
- is an empty sequence. That is, either the inhibitPolicyMapping field
- or the requireExplicitPolicy field MUST be present. The behavior of
- clients that encounter an empty policy constraints field is not
- addressed in this profile.
-
- Conforming CAs MUST mark this extension as critical.
-
-
-
-Cooper, et al. Standards Track [Page 43]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- id-ce-policyConstraints OBJECT IDENTIFIER ::= { id-ce 36 }
-
- PolicyConstraints ::= SEQUENCE {
- requireExplicitPolicy [0] SkipCerts OPTIONAL,
- inhibitPolicyMapping [1] SkipCerts OPTIONAL }
-
- SkipCerts ::= INTEGER (0..MAX)
-
-4.2.1.12. Extended Key Usage
-
- This extension indicates one or more purposes for which the certified
- public key may be used, in addition to or in place of the basic
- purposes indicated in the key usage extension. In general, this
- extension will appear only in end entity certificates. This
- extension is defined as follows:
-
- id-ce-extKeyUsage OBJECT IDENTIFIER ::= { id-ce 37 }
-
- ExtKeyUsageSyntax ::= SEQUENCE SIZE (1..MAX) OF KeyPurposeId
-
- KeyPurposeId ::= OBJECT IDENTIFIER
-
- Key purposes may be defined by any organization with a need. Object
- identifiers used to identify key purposes MUST be assigned in
- accordance with IANA or ITU-T Recommendation X.660 [X.660].
-
- This extension MAY, at the option of the certificate issuer, be
- either critical or non-critical.
-
- If the extension is present, then the certificate MUST only be used
- for one of the purposes indicated. If multiple purposes are
- indicated the application need not recognize all purposes indicated,
- as long as the intended purpose is present. Certificate using
- applications MAY require that the extended key usage extension be
- present and that a particular purpose be indicated in order for the
- certificate to be acceptable to that application.
-
- If a CA includes extended key usages to satisfy such applications,
- but does not wish to restrict usages of the key, the CA can include
- the special KeyPurposeId anyExtendedKeyUsage in addition to the
- particular key purposes required by the applications. Conforming CAs
- SHOULD NOT mark this extension as critical if the anyExtendedKeyUsage
- KeyPurposeId is present. Applications that require the presence of a
- particular purpose MAY reject certificates that include the
- anyExtendedKeyUsage OID but not the particular OID expected for the
- application.
-
-
-
-
-
-Cooper, et al. Standards Track [Page 44]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- If a certificate contains both a key usage extension and an extended
- key usage extension, then both extensions MUST be processed
- independently and the certificate MUST only be used for a purpose
- consistent with both extensions. If there is no purpose consistent
- with both extensions, then the certificate MUST NOT be used for any
- purpose.
-
- The following key usage purposes are defined:
-
- anyExtendedKeyUsage OBJECT IDENTIFIER ::= { id-ce-extKeyUsage 0 }
-
- id-kp OBJECT IDENTIFIER ::= { id-pkix 3 }
-
- id-kp-serverAuth OBJECT IDENTIFIER ::= { id-kp 1 }
- -- TLS WWW server authentication
- -- Key usage bits that may be consistent: digitalSignature,
- -- keyEncipherment or keyAgreement
-
- id-kp-clientAuth OBJECT IDENTIFIER ::= { id-kp 2 }
- -- TLS WWW client authentication
- -- Key usage bits that may be consistent: digitalSignature
- -- and/or keyAgreement
-
- id-kp-codeSigning OBJECT IDENTIFIER ::= { id-kp 3 }
- -- Signing of downloadable executable code
- -- Key usage bits that may be consistent: digitalSignature
-
- id-kp-emailProtection OBJECT IDENTIFIER ::= { id-kp 4 }
- -- Email protection
- -- Key usage bits that may be consistent: digitalSignature,
- -- nonRepudiation, and/or (keyEncipherment or keyAgreement)
-
- id-kp-timeStamping OBJECT IDENTIFIER ::= { id-kp 8 }
- -- Binding the hash of an object to a time
- -- Key usage bits that may be consistent: digitalSignature
- -- and/or nonRepudiation
-
- id-kp-OCSPSigning OBJECT IDENTIFIER ::= { id-kp 9 }
- -- Signing OCSP responses
- -- Key usage bits that may be consistent: digitalSignature
- -- and/or nonRepudiation
-
-4.2.1.13. CRL Distribution Points
-
- The CRL distribution points extension identifies how CRL information
- is obtained. The extension SHOULD be non-critical, but this profile
- RECOMMENDS support for this extension by CAs and applications.
- Further discussion of CRL management is contained in Section 5.
-
-
-
-Cooper, et al. Standards Track [Page 45]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- The cRLDistributionPoints extension is a SEQUENCE of
- DistributionPoint. A DistributionPoint consists of three fields,
- each of which is optional: distributionPoint, reasons, and cRLIssuer.
- While each of these fields is optional, a DistributionPoint MUST NOT
- consist of only the reasons field; either distributionPoint or
- cRLIssuer MUST be present. If the certificate issuer is not the CRL
- issuer, then the cRLIssuer field MUST be present and contain the Name
- of the CRL issuer. If the certificate issuer is also the CRL issuer,
- then conforming CAs MUST omit the cRLIssuer field and MUST include
- the distributionPoint field.
-
- When the distributionPoint field is present, it contains either a
- SEQUENCE of general names or a single value, nameRelativeToCRLIssuer.
- If the DistributionPointName contains multiple values, each name
- describes a different mechanism to obtain the same CRL. For example,
- the same CRL could be available for retrieval through both LDAP and
- HTTP.
-
- If the distributionPoint field contains a directoryName, the entry
- for that directoryName contains the current CRL for the associated
- reasons and the CRL is issued by the associated cRLIssuer. The CRL
- may be stored in either the certificateRevocationList or
- authorityRevocationList attribute. The CRL is to be obtained by the
- application from whatever directory server is locally configured.
- The protocol the application uses to access the directory (e.g., DAP
- or LDAP) is a local matter.
-
- If the DistributionPointName contains a general name of type URI, the
- following semantics MUST be assumed: the URI is a pointer to the
- current CRL for the associated reasons and will be issued by the
- associated cRLIssuer. When the HTTP or FTP URI scheme is used, the
- URI MUST point to a single DER encoded CRL as specified in
- [RFC2585]. HTTP server implementations accessed via the URI SHOULD
- specify the media type application/pkix-crl in the content-type
- header field of the response. When the LDAP URI scheme [RFC4516] is
- used, the URI MUST include a field containing the distinguished
- name of the entry holding the CRL, MUST include a single
- that contains an appropriate attribute description for the attribute
- that holds the CRL [RFC4523], and SHOULD include a
- (e.g., ). Omitting the (e.g.,
- ) has
- the effect of relying on whatever a priori knowledge the client might
- have to contact an appropriate server. When present,
- DistributionPointName SHOULD include at least one LDAP or HTTP URI.
-
- If the DistributionPointName contains the single value
- nameRelativeToCRLIssuer, the value provides a distinguished name
-
-
-
-Cooper, et al. Standards Track [Page 46]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- fragment. The fragment is appended to the X.500 distinguished name
- of the CRL issuer to obtain the distribution point name. If the
- cRLIssuer field in the DistributionPoint is present, then the name
- fragment is appended to the distinguished name that it contains;
- otherwise, the name fragment is appended to the certificate issuer
- distinguished name. Conforming CAs SHOULD NOT use
- nameRelativeToCRLIssuer to specify distribution point names. The
- DistributionPointName MUST NOT use the nameRelativeToCRLIssuer
- alternative when cRLIssuer contains more than one distinguished name.
-
- If the DistributionPoint omits the reasons field, the CRL MUST
- include revocation information for all reasons. This profile
- RECOMMENDS against segmenting CRLs by reason code. When a conforming
- CA includes a cRLDistributionPoints extension in a certificate, it
- MUST include at least one DistributionPoint that points to a CRL that
- covers the certificate for all reasons.
-
- The cRLIssuer identifies the entity that signs and issues the CRL.
- If present, the cRLIssuer MUST only contain the distinguished name
- (DN) from the issuer field of the CRL to which the DistributionPoint
- is pointing. The encoding of the name in the cRLIssuer field MUST be
- exactly the same as the encoding in issuer field of the CRL. If the
- cRLIssuer field is included and the DN in that field does not
- correspond to an X.500 or LDAP directory entry where CRL is located,
- then conforming CAs MUST include the distributionPoint field.
-
- id-ce-cRLDistributionPoints OBJECT IDENTIFIER ::= { id-ce 31 }
-
- CRLDistributionPoints ::= SEQUENCE SIZE (1..MAX) OF DistributionPoint
-
- DistributionPoint ::= SEQUENCE {
- distributionPoint [0] DistributionPointName OPTIONAL,
- reasons [1] ReasonFlags OPTIONAL,
- cRLIssuer [2] GeneralNames OPTIONAL }
-
- DistributionPointName ::= CHOICE {
- fullName [0] GeneralNames,
- nameRelativeToCRLIssuer [1] RelativeDistinguishedName }
-
-
-
-
-
-
-
-
-
-
-
-
-
-Cooper, et al. Standards Track [Page 47]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- ReasonFlags ::= BIT STRING {
- unused (0),
- keyCompromise (1),
- cACompromise (2),
- affiliationChanged (3),
- superseded (4),
- cessationOfOperation (5),
- certificateHold (6),
- privilegeWithdrawn (7),
- aACompromise (8) }
-
-4.2.1.14. Inhibit anyPolicy
-
- The inhibit anyPolicy extension can be used in certificates issued to
- CAs. The inhibit anyPolicy extension indicates that the special
- anyPolicy OID, with the value { 2 5 29 32 0 }, is not considered an
- explicit match for other certificate policies except when it appears
- in an intermediate self-issued CA certificate. The value indicates
- the number of additional non-self-issued certificates that may appear
- in the path before anyPolicy is no longer permitted. For example, a
- value of one indicates that anyPolicy may be processed in
- certificates issued by the subject of this certificate, but not in
- additional certificates in the path.
-
- Conforming CAs MUST mark this extension as critical.
-
- id-ce-inhibitAnyPolicy OBJECT IDENTIFIER ::= { id-ce 54 }
-
- InhibitAnyPolicy ::= SkipCerts
-
- SkipCerts ::= INTEGER (0..MAX)
-
-4.2.1.15. Freshest CRL (a.k.a. Delta CRL Distribution Point)
-
- The freshest CRL extension identifies how delta CRL information is
- obtained. The extension MUST be marked as non-critical by conforming
- CAs. Further discussion of CRL management is contained in Section 5.
-
- The same syntax is used for this extension and the
- cRLDistributionPoints extension, and is described in Section
- 4.2.1.13. The same conventions apply to both extensions.
-
- id-ce-freshestCRL OBJECT IDENTIFIER ::= { id-ce 46 }
-
- FreshestCRL ::= CRLDistributionPoints
-
-
-
-
-
-
-Cooper, et al. Standards Track [Page 48]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
-4.2.2. Private Internet Extensions
-
- This section defines two extensions for use in the Internet Public
- Key Infrastructure. These extensions may be used to direct
- applications to on-line information about the issuer or the subject.
- Each extension contains a sequence of access methods and access
- locations. The access method is an object identifier that indicates
- the type of information that is available. The access location is a
- GeneralName that implicitly specifies the location and format of the
- information and the method for obtaining the information.
-
- Object identifiers are defined for the private extensions. The
- object identifiers associated with the private extensions are defined
- under the arc id-pe within the arc id-pkix. Any future extensions
- defined for the Internet PKI are also expected to be defined under
- the arc id-pe.
-
- id-pkix OBJECT IDENTIFIER ::=
- { iso(1) identified-organization(3) dod(6) internet(1)
- security(5) mechanisms(5) pkix(7) }
-
- id-pe OBJECT IDENTIFIER ::= { id-pkix 1 }
-
-4.2.2.1. Authority Information Access
-
- The authority information access extension indicates how to access
- information and services for the issuer of the certificate in which
- the extension appears. Information and services may include on-line
- validation services and CA policy data. (The location of CRLs is not
- specified in this extension; that information is provided by the
- cRLDistributionPoints extension.) This extension may be included in
- end entity or CA certificates. Conforming CAs MUST mark this
- extension as non-critical.
-
- id-pe-authorityInfoAccess OBJECT IDENTIFIER ::= { id-pe 1 }
-
- AuthorityInfoAccessSyntax ::=
- SEQUENCE SIZE (1..MAX) OF AccessDescription
-
- AccessDescription ::= SEQUENCE {
- accessMethod OBJECT IDENTIFIER,
- accessLocation GeneralName }
-
- id-ad OBJECT IDENTIFIER ::= { id-pkix 48 }
-
- id-ad-caIssuers OBJECT IDENTIFIER ::= { id-ad 2 }
-
- id-ad-ocsp OBJECT IDENTIFIER ::= { id-ad 1 }
-
-
-
-Cooper, et al. Standards Track [Page 49]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- Each entry in the sequence AuthorityInfoAccessSyntax describes the
- format and location of additional information provided by the issuer
- of the certificate in which this extension appears. The type and
- format of the information are specified by the accessMethod field;
- the accessLocation field specifies the location of the information.
- The retrieval mechanism may be implied by the accessMethod or
- specified by accessLocation.
-
- This profile defines two accessMethod OIDs: id-ad-caIssuers and
- id-ad-ocsp.
-
- In a public key certificate, the id-ad-caIssuers OID is used when the
- additional information lists certificates that were issued to the CA
- that issued the certificate containing this extension. The
- referenced CA issuers description is intended to aid certificate
- users in the selection of a certification path that terminates at a
- point trusted by the certificate user.
-
- When id-ad-caIssuers appears as accessMethod, the accessLocation
- field describes the referenced description server and the access
- protocol to obtain the referenced description. The accessLocation
- field is defined as a GeneralName, which can take several forms.
-
- When the accessLocation is a directoryName, the information is to be
- obtained by the application from whatever directory server is locally
- configured. The entry for the directoryName contains CA certificates
- in the crossCertificatePair and/or cACertificate attributes as
- specified in [RFC4523]. The protocol that application uses to access
- the directory (e.g., DAP or LDAP) is a local matter.
-
- Where the information is available via LDAP, the accessLocation
- SHOULD be a uniformResourceIdentifier. The LDAP URI [RFC4516] MUST
- include a field containing the distinguished name of the entry
- holding the certificates, MUST include an field that
- lists appropriate attribute descriptions for the attributes that hold
- the DER encoded certificates or cross-certificate pairs [RFC4523],
- and SHOULD include a (e.g., ).
- Omitting the (e.g., ) has the effect of relying on whatever a priori
- knowledge the client might have to contact an appropriate server.
-
- Where the information is available via HTTP or FTP, accessLocation
- MUST be a uniformResourceIdentifier and the URI MUST point to either
- a single DER encoded certificate as specified in [RFC2585] or a
- collection of certificates in a BER or DER encoded "certs-only" CMS
- message as specified in [RFC2797].
-
-
-
-
-Cooper, et al. Standards Track [Page 50]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- Conforming applications that support HTTP or FTP for accessing
- certificates MUST be able to accept individual DER encoded
- certificates and SHOULD be able to accept "certs-only" CMS messages.
-
- HTTP server implementations accessed via the URI SHOULD specify the
- media type application/pkix-cert [RFC2585] in the content-type header
- field of the response for a single DER encoded certificate and SHOULD
- specify the media type application/pkcs7-mime [RFC2797] in the
- content-type header field of the response for "certs-only" CMS
- messages. For FTP, the name of a file that contains a single DER
- encoded certificate SHOULD have a suffix of ".cer" [RFC2585] and the
- name of a file that contains a "certs-only" CMS message SHOULD have a
- suffix of ".p7c" [RFC2797]. Consuming clients may use the media type
- or file extension as a hint to the content, but should not depend
- solely on the presence of the correct media type or file extension in
- the server response.
-
- The semantics of other id-ad-caIssuers accessLocation name forms are
- not defined.
-
- An authorityInfoAccess extension may include multiple instances of
- the id-ad-caIssuers accessMethod. The different instances may
- specify different methods for accessing the same information or may
- point to different information. When the id-ad-caIssuers
- accessMethod is used, at least one instance SHOULD specify an
- accessLocation that is an HTTP [RFC2616] or LDAP [RFC4516] URI.
-
- The id-ad-ocsp OID is used when revocation information for the
- certificate containing this extension is available using the Online
- Certificate Status Protocol (OCSP) [RFC2560].
-
- When id-ad-ocsp appears as accessMethod, the accessLocation field is
- the location of the OCSP responder, using the conventions defined in
- [RFC2560].
-
- Additional access descriptors may be defined in other PKIX
- specifications.
-
-4.2.2.2. Subject Information Access
-
- The subject information access extension indicates how to access
- information and services for the subject of the certificate in which
- the extension appears. When the subject is a CA, information and
- services may include certificate validation services and CA policy
- data. When the subject is an end entity, the information describes
- the type of services offered and how to access them. In this case,
- the contents of this extension are defined in the protocol
-
-
-
-
-Cooper, et al. Standards Track [Page 51]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- specifications for the supported services. This extension may be
- included in end entity or CA certificates. Conforming CAs MUST mark
- this extension as non-critical.
-
- id-pe-subjectInfoAccess OBJECT IDENTIFIER ::= { id-pe 11 }
-
- SubjectInfoAccessSyntax ::=
- SEQUENCE SIZE (1..MAX) OF AccessDescription
-
- AccessDescription ::= SEQUENCE {
- accessMethod OBJECT IDENTIFIER,
- accessLocation GeneralName }
-
- Each entry in the sequence SubjectInfoAccessSyntax describes the
- format and location of additional information provided by the subject
- of the certificate in which this extension appears. The type and
- format of the information are specified by the accessMethod field;
- the accessLocation field specifies the location of the information.
- The retrieval mechanism may be implied by the accessMethod or
- specified by accessLocation.
-
- This profile defines one access method to be used when the subject is
- a CA and one access method to be used when the subject is an end
- entity. Additional access methods may be defined in the future in
- the protocol specifications for other services.
-
- The id-ad-caRepository OID is used when the subject is a CA that
- publishes certificates it issues in a repository. The accessLocation
- field is defined as a GeneralName, which can take several forms.
-
- When the accessLocation is a directoryName, the information is to be
- obtained by the application from whatever directory server is locally
- configured. When the extension is used to point to CA certificates,
- the entry for the directoryName contains CA certificates in the
- crossCertificatePair and/or cACertificate attributes as specified in
- [RFC4523]. The protocol the application uses to access the directory
- (e.g., DAP or LDAP) is a local matter.
-
- Where the information is available via LDAP, the accessLocation
- SHOULD be a uniformResourceIdentifier. The LDAP URI [RFC4516] MUST
- include a field containing the distinguished name of the entry
- holding the certificates, MUST include an field that
- lists appropriate attribute descriptions for the attributes that hold
- the DER encoded certificates or cross-certificate pairs [RFC4523],
- and SHOULD include a (e.g., ).
-
-
-
-
-
-Cooper, et al. Standards Track [Page 52]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- Omitting the (e.g., ) has the effect of relying on whatever a priori
- knowledge the client might have to contact an appropriate server.
-
- Where the information is available via HTTP or FTP, accessLocation
- MUST be a uniformResourceIdentifier and the URI MUST point to either
- a single DER encoded certificate as specified in [RFC2585] or a
- collection of certificates in a BER or DER encoded "certs-only" CMS
- message as specified in [RFC2797].
-
- Conforming applications that support HTTP or FTP for accessing
- certificates MUST be able to accept individual DER encoded
- certificates and SHOULD be able to accept "certs-only" CMS messages.
-
- HTTP server implementations accessed via the URI SHOULD specify the
- media type application/pkix-cert [RFC2585] in the content-type header
- field of the response for a single DER encoded certificate and SHOULD
- specify the media type application/pkcs7-mime [RFC2797] in the
- content-type header field of the response for "certs-only" CMS
- messages. For FTP, the name of a file that contains a single DER
- encoded certificate SHOULD have a suffix of ".cer" [RFC2585] and the
- name of a file that contains a "certs-only" CMS message SHOULD have a
- suffix of ".p7c" [RFC2797]. Consuming clients may use the media type
- or file extension as a hint to the content, but should not depend
- solely on the presence of the correct media type or file extension in
- the server response.
-
- The semantics of other id-ad-caRepository accessLocation name forms
- are not defined.
-
- A subjectInfoAccess extension may include multiple instances of the
- id-ad-caRepository accessMethod. The different instances may specify
- different methods for accessing the same information or may point to
- different information. When the id-ad-caRepository accessMethod is
- used, at least one instance SHOULD specify an accessLocation that is
- an HTTP [RFC2616] or LDAP [RFC4516] URI.
-
- The id-ad-timeStamping OID is used when the subject offers
- timestamping services using the Time Stamp Protocol defined in
- [RFC3161]. Where the timestamping services are available via HTTP or
- FTP, accessLocation MUST be a uniformResourceIdentifier. Where the
- timestamping services are available via electronic mail,
- accessLocation MUST be an rfc822Name. Where timestamping services
- are available using TCP/IP, the dNSName or iPAddress name forms may
- be used. The semantics of other name forms of accessLocation (when
- accessMethod is id-ad-timeStamping) are not defined by this
- specification.
-
-
-
-
-Cooper, et al. Standards Track [Page 53]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- Additional access descriptors may be defined in other PKIX
- specifications.
-
- id-ad OBJECT IDENTIFIER ::= { id-pkix 48 }
-
- id-ad-caRepository OBJECT IDENTIFIER ::= { id-ad 5 }
-
- id-ad-timeStamping OBJECT IDENTIFIER ::= { id-ad 3 }
-
-5. CRL and CRL Extensions Profile
-
- As discussed above, one goal of this X.509 v2 CRL profile is to
- foster the creation of an interoperable and reusable Internet PKI.
- To achieve this goal, guidelines for the use of extensions are
- specified, and some assumptions are made about the nature of
- information included in the CRL.
-
- CRLs may be used in a wide range of applications and environments
- covering a broad spectrum of interoperability goals and an even
- broader spectrum of operational and assurance requirements. This
- profile establishes a common baseline for generic applications
- requiring broad interoperability. The profile defines a set of
- information that can be expected in every CRL. Also, the profile
- defines common locations within the CRL for frequently used
- attributes as well as common representations for these attributes.
-
- CRL issuers issue CRLs. The CRL issuer is either the CA or an entity
- that has been authorized by the CA to issue CRLs. CAs publish CRLs
- to provide status information about the certificates they issued.
- However, a CA may delegate this responsibility to another trusted
- authority.
-
- Each CRL has a particular scope. The CRL scope is the set of
- certificates that could appear on a given CRL. For example, the
- scope could be "all certificates issued by CA X", "all CA
- certificates issued by CA X", "all certificates issued by CA X that
- have been revoked for reasons of key compromise and CA compromise",
- or a set of certificates based on arbitrary local information, such
- as "all certificates issued to the NIST employees located in
- Boulder".
-
- A complete CRL lists all unexpired certificates, within its scope,
- that have been revoked for one of the revocation reasons covered by
- the CRL scope. A full and complete CRL lists all unexpired
- certificates issued by a CA that have been revoked for any reason.
- (Note that since CAs and CRL issuers are identified by name, the
- scope of a CRL is not affected by the key used to sign the CRL or the
- key(s) used to sign certificates.)
-
-
-
-Cooper, et al. Standards Track [Page 54]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- If the scope of the CRL includes one or more certificates issued by
- an entity other than the CRL issuer, then it is an indirect CRL. The
- scope of an indirect CRL may be limited to certificates issued by a
- single CA or may include certificates issued by multiple CAs. If the
- issuer of the indirect CRL is a CA, then the scope of the indirect
- CRL MAY also include certificates issued by the issuer of the CRL.
-
- The CRL issuer MAY also generate delta CRLs. A delta CRL only lists
- those certificates, within its scope, whose revocation status has
- changed since the issuance of a referenced complete CRL. The
- referenced complete CRL is referred to as a base CRL. The scope of a
- delta CRL MUST be the same as the base CRL that it references.
-
- This profile defines one private Internet CRL extension but does not
- define any private CRL entry extensions.
-
- Environments with additional or special purpose requirements may
- build on this profile or may replace it.
-
- Conforming CAs are not required to issue CRLs if other revocation or
- certificate status mechanisms are provided. When CRLs are issued,
- the CRLs MUST be version 2 CRLs, include the date by which the next
- CRL will be issued in the nextUpdate field (Section 5.1.2.5), include
- the CRL number extension (Section 5.2.3), and include the authority
- key identifier extension (Section 5.2.1). Conforming applications
- that support CRLs are REQUIRED to process both version 1 and version
- 2 complete CRLs that provide revocation information for all
- certificates issued by one CA. Conforming applications are not
- required to support processing of delta CRLs, indirect CRLs, or CRLs
- with a scope other than all certificates issued by one CA.
-
-5.1. CRL Fields
-
- The X.509 v2 CRL syntax is as follows. For signature calculation,
- the data that is to be signed is ASN.1 DER encoded. ASN.1 DER
- encoding is a tag, length, value encoding system for each element.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Cooper, et al. Standards Track [Page 55]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- CertificateList ::= SEQUENCE {
- tbsCertList TBSCertList,
- signatureAlgorithm AlgorithmIdentifier,
- signatureValue BIT STRING }
-
- TBSCertList ::= SEQUENCE {
- version Version OPTIONAL,
- -- if present, MUST be v2
- signature AlgorithmIdentifier,
- issuer Name,
- thisUpdate Time,
- nextUpdate Time OPTIONAL,
- revokedCertificates SEQUENCE OF SEQUENCE {
- userCertificate CertificateSerialNumber,
- revocationDate Time,
- crlEntryExtensions Extensions OPTIONAL
- -- if present, version MUST be v2
- } OPTIONAL,
- crlExtensions [0] EXPLICIT Extensions OPTIONAL
- -- if present, version MUST be v2
- }
-
- -- Version, Time, CertificateSerialNumber, and Extensions
- -- are all defined in the ASN.1 in Section 4.1
-
- -- AlgorithmIdentifier is defined in Section 4.1.1.2
-
- The following items describe the use of the X.509 v2 CRL in the
- Internet PKI.
-
-5.1.1. CertificateList Fields
-
- The CertificateList is a SEQUENCE of three required fields. The
- fields are described in detail in the following subsections.
-
-5.1.1.1. tbsCertList
-
- The first field in the sequence is the tbsCertList. This field is
- itself a sequence containing the name of the issuer, issue date,
- issue date of the next list, the optional list of revoked
- certificates, and optional CRL extensions. When there are no revoked
- certificates, the revoked certificates list is absent. When one or
- more certificates are revoked, each entry on the revoked certificate
- list is defined by a sequence of user certificate serial number,
- revocation date, and optional CRL entry extensions.
-
-
-
-
-
-
-Cooper, et al. Standards Track [Page 56]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
-5.1.1.2. signatureAlgorithm
-
- The signatureAlgorithm field contains the algorithm identifier for
- the algorithm used by the CRL issuer to sign the CertificateList.
- The field is of type AlgorithmIdentifier, which is defined in Section
- 4.1.1.2. [RFC3279], [RFC4055], and [RFC4491] list supported
- algorithms for this specification, but other signature algorithms MAY
- also be supported.
-
- This field MUST contain the same algorithm identifier as the
- signature field in the sequence tbsCertList (Section 5.1.2.2).
-
-5.1.1.3. signatureValue
-
- The signatureValue field contains a digital signature computed upon
- the ASN.1 DER encoded tbsCertList. The ASN.1 DER encoded tbsCertList
- is used as the input to the signature function. This signature value
- is encoded as a BIT STRING and included in the CRL signatureValue
- field. The details of this process are specified for each of the
- supported algorithms in [RFC3279], [RFC4055], and [RFC4491].
-
- CAs that are also CRL issuers MAY use one private key to digitally
- sign certificates and CRLs, or MAY use separate private keys to
- digitally sign certificates and CRLs. When separate private keys are
- employed, each of the public keys associated with these private keys
- is placed in a separate certificate, one with the keyCertSign bit set
- in the key usage extension, and one with the cRLSign bit set in the
- key usage extension (Section 4.2.1.3). When separate private keys
- are employed, certificates issued by the CA contain one authority key
- identifier, and the corresponding CRLs contain a different authority
- key identifier. The use of separate CA certificates for validation
- of certificate signatures and CRL signatures can offer improved
- security characteristics; however, it imposes a burden on
- applications, and it might limit interoperability. Many applications
- construct a certification path, and then validate the certification
- path (Section 6). CRL checking in turn requires a separate
- certification path to be constructed and validated for the CA's CRL
- signature validation certificate. Applications that perform CRL
- checking MUST support certification path validation when certificates
- and CRLs are digitally signed with the same CA private key. These
- applications SHOULD support certification path validation when
- certificates and CRLs are digitally signed with different CA private
- keys.
-
-
-
-
-
-
-
-
-Cooper, et al. Standards Track [Page 57]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
-5.1.2. Certificate List "To Be Signed"
-
- The certificate list to be signed, or TBSCertList, is a sequence of
- required and optional fields. The required fields identify the CRL
- issuer, the algorithm used to sign the CRL, and the date and time the
- CRL was issued.
-
- Optional fields include the date and time by which the CRL issuer
- will issue the next CRL, lists of revoked certificates, and CRL
- extensions. The revoked certificate list is optional to support the
- case where a CA has not revoked any unexpired certificates that it
- has issued. This profile requires conforming CRL issuers to include
- the nextUpdate field and the CRL number and authority key identifier
- CRL extensions in all CRLs issued.
-
-5.1.2.1. Version
-
- This optional field describes the version of the encoded CRL. When
- extensions are used, as required by this profile, this field MUST be
- present and MUST specify version 2 (the integer value is 1).
-
-5.1.2.2. Signature
-
- This field contains the algorithm identifier for the algorithm used
- to sign the CRL. [RFC3279], [RFC4055], and [RFC4491] list OIDs for
- the most popular signature algorithms used in the Internet PKI.
-
- This field MUST contain the same algorithm identifier as the
- signatureAlgorithm field in the sequence CertificateList (Section
- 5.1.1.2).
-
-5.1.2.3. Issuer Name
-
- The issuer name identifies the entity that has signed and issued the
- CRL. The issuer identity is carried in the issuer field.
- Alternative name forms may also appear in the issuerAltName extension
- (Section 5.2.2). The issuer field MUST contain a non-empty X.500
- distinguished name (DN). The issuer field is defined as the X.501
- type Name, and MUST follow the encoding rules for the issuer name
- field in the certificate (Section 4.1.2.4).
-
-5.1.2.4. This Update
-
- This field indicates the issue date of this CRL. thisUpdate may be
- encoded as UTCTime or GeneralizedTime.
-
- CRL issuers conforming to this profile MUST encode thisUpdate as
- UTCTime for dates through the year 2049. CRL issuers conforming to
-
-
-
-Cooper, et al. Standards Track [Page 58]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- this profile MUST encode thisUpdate as GeneralizedTime for dates in
- the year 2050 or later. Conforming applications MUST be able to
- process dates that are encoded in either UTCTime or GeneralizedTime.
-
- Where encoded as UTCTime, thisUpdate MUST be specified and
- interpreted as defined in Section 4.1.2.5.1. Where encoded as
- GeneralizedTime, thisUpdate MUST be specified and interpreted as
- defined in Section 4.1.2.5.2.
-
-5.1.2.5. Next Update
-
- This field indicates the date by which the next CRL will be issued.
- The next CRL could be issued before the indicated date, but it will
- not be issued any later than the indicated date. CRL issuers SHOULD
- issue CRLs with a nextUpdate time equal to or later than all previous
- CRLs. nextUpdate may be encoded as UTCTime or GeneralizedTime.
-
- Conforming CRL issuers MUST include the nextUpdate field in all CRLs.
- Note that the ASN.1 syntax of TBSCertList describes this field as
- OPTIONAL, which is consistent with the ASN.1 structure defined in
- [X.509]. The behavior of clients processing CRLs that omit
- nextUpdate is not specified by this profile.
-
- CRL issuers conforming to this profile MUST encode nextUpdate as
- UTCTime for dates through the year 2049. CRL issuers conforming to
- this profile MUST encode nextUpdate as GeneralizedTime for dates in
- the year 2050 or later. Conforming applications MUST be able to
- process dates that are encoded in either UTCTime or GeneralizedTime.
-
- Where encoded as UTCTime, nextUpdate MUST be specified and
- interpreted as defined in Section 4.1.2.5.1. Where encoded as
- GeneralizedTime, nextUpdate MUST be specified and interpreted as
- defined in Section 4.1.2.5.2.
-
-5.1.2.6. Revoked Certificates
-
- When there are no revoked certificates, the revoked certificates list
- MUST be absent. Otherwise, revoked certificates are listed by their
- serial numbers. Certificates revoked by the CA are uniquely
- identified by the certificate serial number. The date on which the
- revocation occurred is specified. The time for revocationDate MUST
- be expressed as described in Section 5.1.2.4. Additional information
- may be supplied in CRL entry extensions; CRL entry extensions are
- discussed in Section 5.3.
-
-
-
-
-
-
-
-Cooper, et al. Standards Track [Page 59]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
-5.1.2.7. Extensions
-
- This field may only appear if the version is 2 (Section 5.1.2.1). If
- present, this field is a sequence of one or more CRL extensions. CRL
- extensions are discussed in Section 5.2.
-
-5.2. CRL Extensions
-
- The extensions defined by ANSI X9, ISO/IEC, and ITU-T for X.509 v2
- CRLs [X.509] [X9.55] provide methods for associating additional
- attributes with CRLs. The X.509 v2 CRL format also allows
- communities to define private extensions to carry information unique
- to those communities. Each extension in a CRL may be designated as
- critical or non-critical. If a CRL contains a critical extension
- that the application cannot process, then the application MUST NOT
- use that CRL to determine the status of certificates. However,
- applications may ignore unrecognized non-critical extensions. The
- following subsections present those extensions used within Internet
- CRLs. Communities may elect to include extensions in CRLs that are
- not defined in this specification. However, caution should be
- exercised in adopting any critical extensions in CRLs that might be
- used in a general context.
-
- Conforming CRL issuers are REQUIRED to include the authority key
- identifier (Section 5.2.1) and the CRL number (Section 5.2.3)
- extensions in all CRLs issued.
-
-5.2.1. Authority Key Identifier
-
- The authority key identifier extension provides a means of
- identifying the public key corresponding to the private key used to
- sign a CRL. The identification can be based on either the key
- identifier (the subject key identifier in the CRL signer's
- certificate) or the issuer name and serial number. This extension is
- especially useful where an issuer has more than one signing key,
- either due to multiple concurrent key pairs or due to changeover.
-
- Conforming CRL issuers MUST use the key identifier method, and MUST
- include this extension in all CRLs issued.
-
- The syntax for this CRL extension is defined in Section 4.2.1.1.
-
-5.2.2. Issuer Alternative Name
-
- The issuer alternative name extension allows additional identities to
- be associated with the issuer of the CRL. Defined options include an
- electronic mail address (rfc822Name), a DNS name, an IP address, and
- a URI. Multiple instances of a name form and multiple name forms may
-
-
-
-Cooper, et al. Standards Track [Page 60]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- be included. Whenever such identities are used, the issuer
- alternative name extension MUST be used; however, a DNS name MAY be
- represented in the issuer field using the domainComponent attribute
- as described in Section 4.1.2.4.
-
- Conforming CRL issuers SHOULD mark the issuerAltName extension as
- non-critical.
-
- The OID and syntax for this CRL extension are defined in Section
- 4.2.1.7.
-
-5.2.3. CRL Number
-
- The CRL number is a non-critical CRL extension that conveys a
- monotonically increasing sequence number for a given CRL scope and
- CRL issuer. This extension allows users to easily determine when a
- particular CRL supersedes another CRL. CRL numbers also support the
- identification of complementary complete CRLs and delta CRLs. CRL
- issuers conforming to this profile MUST include this extension in all
- CRLs and MUST mark this extension as non-critical.
-
- If a CRL issuer generates delta CRLs in addition to complete CRLs for
- a given scope, the complete CRLs and delta CRLs MUST share one
- numbering sequence. If a delta CRL and a complete CRL that cover the
- same scope are issued at the same time, they MUST have the same CRL
- number and provide the same revocation information. That is, the
- combination of the delta CRL and an acceptable complete CRL MUST
- provide the same revocation information as the simultaneously issued
- complete CRL.
-
- If a CRL issuer generates two CRLs (two complete CRLs, two delta
- CRLs, or a complete CRL and a delta CRL) for the same scope at
- different times, the two CRLs MUST NOT have the same CRL number.
- That is, if the this update field (Section 5.1.2.4) in the two CRLs
- are not identical, the CRL numbers MUST be different.
-
- Given the requirements above, CRL numbers can be expected to contain
- long integers. CRL verifiers MUST be able to handle CRLNumber values
- up to 20 octets. Conforming CRL issuers MUST NOT use CRLNumber
- values longer than 20 octets.
-
- id-ce-cRLNumber OBJECT IDENTIFIER ::= { id-ce 20 }
-
- CRLNumber ::= INTEGER (0..MAX)
-
-
-
-
-
-
-
-Cooper, et al. Standards Track [Page 61]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
-5.2.4. Delta CRL Indicator
-
- The delta CRL indicator is a critical CRL extension that identifies a
- CRL as being a delta CRL. Delta CRLs contain updates to revocation
- information previously distributed, rather than all the information
- that would appear in a complete CRL. The use of delta CRLs can
- significantly reduce network load and processing time in some
- environments. Delta CRLs are generally smaller than the CRLs they
- update, so applications that obtain delta CRLs consume less network
- bandwidth than applications that obtain the corresponding complete
- CRLs. Applications that store revocation information in a format
- other than the CRL structure can add new revocation information to
- the local database without reprocessing information.
-
- The delta CRL indicator extension contains the single value of type
- BaseCRLNumber. The CRL number identifies the CRL, complete for a
- given scope, that was used as the starting point in the generation of
- this delta CRL. A conforming CRL issuer MUST publish the referenced
- base CRL as a complete CRL. The delta CRL contains all updates to
- the revocation status for that same scope. The combination of a
- delta CRL plus the referenced base CRL is equivalent to a complete
- CRL, for the applicable scope, at the time of publication of the
- delta CRL.
-
- When a conforming CRL issuer generates a delta CRL, the delta CRL
- MUST include a critical delta CRL indicator extension.
-
- When a delta CRL is issued, it MUST cover the same set of reasons and
- the same set of certificates that were covered by the base CRL it
- references. That is, the scope of the delta CRL MUST be the same as
- the scope of the complete CRL referenced as the base. The referenced
- base CRL and the delta CRL MUST omit the issuing distribution point
- extension or contain identical issuing distribution point extensions.
- Further, the CRL issuer MUST use the same private key to sign the
- delta CRL and any complete CRL that it can be used to update.
-
- An application that supports delta CRLs can construct a CRL that is
- complete for a given scope by combining a delta CRL for that scope
- with either an issued CRL that is complete for that scope or a
- locally constructed CRL that is complete for that scope.
-
- When a delta CRL is combined with a complete CRL or a locally
- constructed CRL, the resulting locally constructed CRL has the CRL
- number specified in the CRL number extension found in the delta CRL
- used in its construction. In addition, the resulting locally
- constructed CRL has the thisUpdate and nextUpdate times specified in
-
-
-
-
-
-Cooper, et al. Standards Track [Page 62]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- the corresponding fields of the delta CRL used in its construction.
- In addition, the locally constructed CRL inherits the issuing
- distribution point from the delta CRL.
-
- A complete CRL and a delta CRL MAY be combined if the following four
- conditions are satisfied:
-
- (a) The complete CRL and delta CRL have the same issuer.
-
- (b) The complete CRL and delta CRL have the same scope. The two
- CRLs have the same scope if either of the following
- conditions are met:
-
- (1) The issuingDistributionPoint extension is omitted from
- both the complete CRL and the delta CRL.
-
- (2) The issuingDistributionPoint extension is present in both
- the complete CRL and the delta CRL, and the values for
- each of the fields in the extensions are the same in both
- CRLs.
-
- (c) The CRL number of the complete CRL is equal to or greater
- than the BaseCRLNumber specified in the delta CRL. That is,
- the complete CRL contains (at a minimum) all the revocation
- information held by the referenced base CRL.
-
- (d) The CRL number of the complete CRL is less than the CRL
- number of the delta CRL. That is, the delta CRL follows the
- complete CRL in the numbering sequence.
-
- CRL issuers MUST ensure that the combination of a delta CRL and any
- appropriate complete CRL accurately reflects the current revocation
- status. The CRL issuer MUST include an entry in the delta CRL for
- each certificate within the scope of the delta CRL whose status has
- changed since the generation of the referenced base CRL:
-
- (a) If the certificate is revoked for a reason included in the
- scope of the CRL, list the certificate as revoked.
-
- (b) If the certificate is valid and was listed on the referenced
- base CRL or any subsequent CRL with reason code
- certificateHold, and the reason code certificateHold is
- included in the scope of the CRL, list the certificate with
- the reason code removeFromCRL.
-
-
-
-
-
-
-
-Cooper, et al. Standards Track [Page 63]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- (c) If the certificate is revoked for a reason outside the scope
- of the CRL, but the certificate was listed on the referenced
- base CRL or any subsequent CRL with a reason code included in
- the scope of this CRL, list the certificate as revoked but
- omit the reason code.
-
- (d) If the certificate is revoked for a reason outside the scope
- of the CRL and the certificate was neither listed on the
- referenced base CRL nor any subsequent CRL with a reason code
- included in the scope of this CRL, do not list the
- certificate on this CRL.
-
- The status of a certificate is considered to have changed if it is
- revoked (for any revocation reason, including certificateHold), if it
- is released from hold, or if its revocation reason changes.
-
- It is appropriate to list a certificate with reason code
- removeFromCRL on a delta CRL even if the certificate was not on hold
- in the referenced base CRL. If the certificate was placed on hold in
- any CRL issued after the base but before this delta CRL and then
- released from hold, it MUST be listed on the delta CRL with
- revocation reason removeFromCRL.
-
- A CRL issuer MAY optionally list a certificate on a delta CRL with
- reason code removeFromCRL if the notAfter time specified in the
- certificate precedes the thisUpdate time specified in the delta CRL
- and the certificate was listed on the referenced base CRL or in any
- CRL issued after the base but before this delta CRL.
-
- If a certificate revocation notice first appears on a delta CRL, then
- it is possible for the certificate validity period to expire before
- the next complete CRL for the same scope is issued. In this case,
- the revocation notice MUST be included in all subsequent delta CRLs
- until the revocation notice is included on at least one explicitly
- issued complete CRL for this scope.
-
- An application that supports delta CRLs MUST be able to construct a
- current complete CRL by combining a previously issued complete CRL
- and the most current delta CRL. An application that supports delta
- CRLs MAY also be able to construct a current complete CRL by
- combining a previously locally constructed complete CRL and the
- current delta CRL. A delta CRL is considered to be the current one
- if the current time is between the times contained in the thisUpdate
- and nextUpdate fields. Under some circumstances, the CRL issuer may
- publish one or more delta CRLs before the time indicated by the
- nextUpdate field. If more than one current delta CRL for a given
- scope is encountered, the application SHOULD consider the one with
- the latest value in thisUpdate to be the most current one.
-
-
-
-Cooper, et al. Standards Track [Page 64]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- id-ce-deltaCRLIndicator OBJECT IDENTIFIER ::= { id-ce 27 }
-
- BaseCRLNumber ::= CRLNumber
-
-5.2.5. Issuing Distribution Point
-
- The issuing distribution point is a critical CRL extension that
- identifies the CRL distribution point and scope for a particular CRL,
- and it indicates whether the CRL covers revocation for end entity
- certificates only, CA certificates only, attribute certificates only,
- or a limited set of reason codes. Although the extension is
- critical, conforming implementations are not required to support this
- extension. However, implementations that do not support this
- extension MUST either treat the status of any certificate not listed
- on this CRL as unknown or locate another CRL that does not contain
- any unrecognized critical extensions.
-
- The CRL is signed using the CRL issuer's private key. CRL
- distribution points do not have their own key pairs. If the CRL is
- stored in the X.500 directory, it is stored in the directory entry
- corresponding to the CRL distribution point, which may be different
- from the directory entry of the CRL issuer.
-
- The reason codes associated with a distribution point MUST be
- specified in onlySomeReasons. If onlySomeReasons does not appear,
- the distribution point MUST contain revocations for all reason codes.
- CAs may use CRL distribution points to partition the CRL on the basis
- of compromise and routine revocation. In this case, the revocations
- with reason code keyCompromise (1), cACompromise (2), and
- aACompromise (8) appear in one distribution point, and the
- revocations with other reason codes appear in another distribution
- point.
-
- If a CRL includes an issuingDistributionPoint extension with
- onlySomeReasons present, then every certificate in the scope of the
- CRL that is revoked MUST be assigned a revocation reason other than
- unspecified. The assigned revocation reason is used to determine on
- which CRL(s) to list the revoked certificate, however, there is no
- requirement to include the reasonCode CRL entry extension in the
- corresponding CRL entry.
-
- The syntax and semantics for the distributionPoint field are the same
- as for the distributionPoint field in the cRLDistributionPoints
- extension (Section 4.2.1.13). If the distributionPoint field is
- present, then it MUST include at least one of names from the
- corresponding distributionPoint field of the cRLDistributionPoints
-
-
-
-
-
-Cooper, et al. Standards Track [Page 65]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- extension of every certificate that is within the scope of this CRL.
- The identical encoding MUST be used in the distributionPoint fields
- of the certificate and the CRL.
-
- If the distributionPoint field is absent, the CRL MUST contain
- entries for all revoked unexpired certificates issued by the CRL
- issuer, if any, within the scope of the CRL.
-
- If the scope of the CRL only includes certificates issued by the CRL
- issuer, then the indirectCRL boolean MUST be set to FALSE.
- Otherwise, if the scope of the CRL includes certificates issued by
- one or more authorities other than the CRL issuer, the indirectCRL
- boolean MUST be set to TRUE. The authority responsible for each
- entry is indicated by the certificate issuer CRL entry extension
- (Section 5.3.3).
-
- If the scope of the CRL only includes end entity public key
- certificates, then onlyContainsUserCerts MUST be set to TRUE. If the
- scope of the CRL only includes CA certificates, then
- onlyContainsCACerts MUST be set to TRUE. If either
- onlyContainsUserCerts or onlyContainsCACerts is set to TRUE, then the
- scope of the CRL MUST NOT include any version 1 or version 2
- certificates. Conforming CRLs issuers MUST set the
- onlyContainsAttributeCerts boolean to FALSE.
-
- Conforming CRLs issuers MUST NOT issue CRLs where the DER encoding of
- the issuing distribution point extension is an empty sequence. That
- is, if onlyContainsUserCerts, onlyContainsCACerts, indirectCRL, and
- onlyContainsAttributeCerts are all FALSE, then either the
- distributionPoint field or the onlySomeReasons field MUST be present.
-
- id-ce-issuingDistributionPoint OBJECT IDENTIFIER ::= { id-ce 28 }
-
- IssuingDistributionPoint ::= SEQUENCE {
- distributionPoint [0] DistributionPointName OPTIONAL,
- onlyContainsUserCerts [1] BOOLEAN DEFAULT FALSE,
- onlyContainsCACerts [2] BOOLEAN DEFAULT FALSE,
- onlySomeReasons [3] ReasonFlags OPTIONAL,
- indirectCRL [4] BOOLEAN DEFAULT FALSE,
- onlyContainsAttributeCerts [5] BOOLEAN DEFAULT FALSE }
-
- -- at most one of onlyContainsUserCerts, onlyContainsCACerts,
- -- and onlyContainsAttributeCerts may be set to TRUE.
-
-
-
-
-
-
-
-
-Cooper, et al. Standards Track [Page 66]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
-5.2.6. Freshest CRL (a.k.a. Delta CRL Distribution Point)
-
- The freshest CRL extension identifies how delta CRL information for
- this complete CRL is obtained. Conforming CRL issuers MUST mark this
- extension as non-critical. This extension MUST NOT appear in delta
- CRLs.
-
- The same syntax is used for this extension as the
- cRLDistributionPoints certificate extension, and is described in
- Section 4.2.1.13. However, only the distribution point field is
- meaningful in this context. The reasons and cRLIssuer fields MUST be
- omitted from this CRL extension.
-
- Each distribution point name provides the location at which a delta
- CRL for this complete CRL can be found. The scope of these delta
- CRLs MUST be the same as the scope of this complete CRL. The
- contents of this CRL extension are only used to locate delta CRLs;
- the contents are not used to validate the CRL or the referenced delta
- CRLs. The encoding conventions defined for distribution points in
- Section 4.2.1.13 apply to this extension.
-
- id-ce-freshestCRL OBJECT IDENTIFIER ::= { id-ce 46 }
-
- FreshestCRL ::= CRLDistributionPoints
-
-5.2.7. Authority Information Access
-
- This section defines the use of the Authority Information Access
- extension in a CRL. The syntax and semantics defined in Section
- 4.2.2.1 for the certificate extension are also used for the CRL
- extension.
-
- This CRL extension MUST be marked as non-critical.
-
- When present in a CRL, this extension MUST include at least one
- AccessDescription specifying id-ad-caIssuers as the accessMethod.
- The id-ad-caIssuers OID is used when the information available lists
- certificates that can be used to verify the signature on the CRL
- (i.e., certificates that have a subject name that matches the issuer
- name on the CRL and that have a subject public key that corresponds
- to the private key used to sign the CRL). Access method types other
- than id-ad-caIssuers MUST NOT be included. At least one instance of
- AccessDescription SHOULD specify an accessLocation that is an HTTP
- [RFC2616] or LDAP [RFC4516] URI.
-
-
-
-
-
-
-
-Cooper, et al. Standards Track [Page 67]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- Where the information is available via HTTP or FTP, accessLocation
- MUST be a uniformResourceIdentifier and the URI MUST point to either
- a single DER encoded certificate as specified in [RFC2585] or a
- collection of certificates in a BER or DER encoded "certs-only" CMS
- message as specified in [RFC2797].
-
- Conforming applications that support HTTP or FTP for accessing
- certificates MUST be able to accept individual DER encoded
- certificates and SHOULD be able to accept "certs-only" CMS messages.
-
- HTTP server implementations accessed via the URI SHOULD specify the
- media type application/pkix-cert [RFC2585] in the content-type header
- field of the response for a single DER encoded certificate and SHOULD
- specify the media type application/pkcs7-mime [RFC2797] in the
- content-type header field of the response for "certs-only" CMS
- messages. For FTP, the name of a file that contains a single DER
- encoded certificate SHOULD have a suffix of ".cer" [RFC2585] and the
- name of a file that contains a "certs-only" CMS message SHOULD have a
- suffix of ".p7c" [RFC2797]. Consuming clients may use the media type
- or file extension as a hint to the content, but should not depend
- solely on the presence of the correct media type or file extension in
- the server response.
-
- When the accessLocation is a directoryName, the information is to be
- obtained by the application from whatever directory server is locally
- configured. When one CA public key is used to validate signatures on
- certificates and CRLs, the desired CA certificate is stored in the
- crossCertificatePair and/or cACertificate attributes as specified in
- [RFC4523]. When different public keys are used to validate
- signatures on certificates and CRLs, the desired certificate is
- stored in the userCertificate attribute as specified in [RFC4523].
- Thus, implementations that support the directoryName form of
- accessLocation MUST be prepared to find the needed certificate in any
- of these three attributes. The protocol that an application uses to
- access the directory (e.g., DAP or LDAP) is a local matter.
-
- Where the information is available via LDAP, the accessLocation
- SHOULD be a uniformResourceIdentifier. The LDAP URI [RFC4516] MUST
- include a field containing the distinguished name of the entry
- holding the certificates, MUST include an field that
- lists appropriate attribute descriptions for the attributes that hold
- the DER encoded certificates or cross-certificate pairs [RFC4523],
- and SHOULD include a (e.g., ).
- Omitting the (e.g., ) has the effect of relying on whatever a priori
- knowledge the client might have to contact an appropriate server.
-
-
-
-
-Cooper, et al. Standards Track [Page 68]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
-5.3. CRL Entry Extensions
-
- The CRL entry extensions defined by ISO/IEC, ITU-T, and ANSI X9 for
- X.509 v2 CRLs provide methods for associating additional attributes
- with CRL entries [X.509] [X9.55]. The X.509 v2 CRL format also
- allows communities to define private CRL entry extensions to carry
- information unique to those communities. Each extension in a CRL
- entry may be designated as critical or non-critical. If a CRL
- contains a critical CRL entry extension that the application cannot
- process, then the application MUST NOT use that CRL to determine the
- status of any certificates. However, applications may ignore
- unrecognized non-critical CRL entry extensions.
-
- The following subsections present recommended extensions used within
- Internet CRL entries and standard locations for information.
- Communities may elect to use additional CRL entry extensions;
- however, caution should be exercised in adopting any critical CRL
- entry extensions in CRLs that might be used in a general context.
-
- Support for the CRL entry extensions defined in this specification is
- optional for conforming CRL issuers and applications. However, CRL
- issuers SHOULD include reason codes (Section 5.3.1) and invalidity
- dates (Section 5.3.2) whenever this information is available.
-
-5.3.1. Reason Code
-
- The reasonCode is a non-critical CRL entry extension that identifies
- the reason for the certificate revocation. CRL issuers are strongly
- encouraged to include meaningful reason codes in CRL entries;
- however, the reason code CRL entry extension SHOULD be absent instead
- of using the unspecified (0) reasonCode value.
-
- The removeFromCRL (8) reasonCode value may only appear in delta CRLs
- and indicates that a certificate is to be removed from a CRL because
- either the certificate expired or was removed from hold. All other
- reason codes may appear in any CRL and indicate that the specified
- certificate should be considered revoked.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Cooper, et al. Standards Track [Page 69]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- id-ce-cRLReasons OBJECT IDENTIFIER ::= { id-ce 21 }
-
- -- reasonCode ::= { CRLReason }
-
- CRLReason ::= ENUMERATED {
- unspecified (0),
- keyCompromise (1),
- cACompromise (2),
- affiliationChanged (3),
- superseded (4),
- cessationOfOperation (5),
- certificateHold (6),
- -- value 7 is not used
- removeFromCRL (8),
- privilegeWithdrawn (9),
- aACompromise (10) }
-
-5.3.2. Invalidity Date
-
- The invalidity date is a non-critical CRL entry extension that
- provides the date on which it is known or suspected that the private
- key was compromised or that the certificate otherwise became invalid.
- This date may be earlier than the revocation date in the CRL entry,
- which is the date at which the CA processed the revocation. When a
- revocation is first posted by a CRL issuer in a CRL, the invalidity
- date may precede the date of issue of earlier CRLs, but the
- revocation date SHOULD NOT precede the date of issue of earlier CRLs.
- Whenever this information is available, CRL issuers are strongly
- encouraged to share it with CRL users.
-
- The GeneralizedTime values included in this field MUST be expressed
- in Greenwich Mean Time (Zulu), and MUST be specified and interpreted
- as defined in Section 4.1.2.5.2.
-
- id-ce-invalidityDate OBJECT IDENTIFIER ::= { id-ce 24 }
-
- InvalidityDate ::= GeneralizedTime
-
-5.3.3. Certificate Issuer
-
- This CRL entry extension identifies the certificate issuer associated
- with an entry in an indirect CRL, that is, a CRL that has the
- indirectCRL indicator set in its issuing distribution point
- extension. When present, the certificate issuer CRL entry extension
- includes one or more names from the issuer field and/or issuer
- alternative name extension of the certificate that corresponds to the
- CRL entry. If this extension is not present on the first entry in an
- indirect CRL, the certificate issuer defaults to the CRL issuer. On
-
-
-
-Cooper, et al. Standards Track [Page 70]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- subsequent entries in an indirect CRL, if this extension is not
- present, the certificate issuer for the entry is the same as that for
- the preceding entry. This field is defined as follows:
-
- id-ce-certificateIssuer OBJECT IDENTIFIER ::= { id-ce 29 }
-
- CertificateIssuer ::= GeneralNames
-
- Conforming CRL issuers MUST include in this extension the
- distinguished name (DN) from the issuer field of the certificate that
- corresponds to this CRL entry. The encoding of the DN MUST be
- identical to the encoding used in the certificate.
-
- CRL issuers MUST mark this extension as critical since an
- implementation that ignored this extension could not correctly
- attribute CRL entries to certificates. This specification RECOMMENDS
- that implementations recognize this extension.
-
-6. Certification Path Validation
-
- Certification path validation procedures for the Internet PKI are
- based on the algorithm supplied in [X.509]. Certification path
- processing verifies the binding between the subject distinguished
- name and/or subject alternative name and subject public key. The
- binding is limited by constraints that are specified in the
- certificates that comprise the path and inputs that are specified by
- the relying party. The basic constraints and policy constraints
- extensions allow the certification path processing logic to automate
- the decision making process.
-
- This section describes an algorithm for validating certification
- paths. Conforming implementations of this specification are not
- required to implement this algorithm, but MUST provide functionality
- equivalent to the external behavior resulting from this procedure.
- Any algorithm may be used by a particular implementation so long as
- it derives the correct result.
-
- In Section 6.1, the text describes basic path validation. Valid
- paths begin with certificates issued by a trust anchor. The
- algorithm requires the public key of the CA, the CA's name, and any
- constraints upon the set of paths that may be validated using this
- key.
-
- The selection of a trust anchor is a matter of policy: it could be
- the top CA in a hierarchical PKI, the CA that issued the verifier's
- own certificate(s), or any other CA in a network PKI. The path
-
-
-
-
-
-Cooper, et al. Standards Track [Page 71]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- validation procedure is the same regardless of the choice of trust
- anchor. In addition, different applications may rely on different
- trust anchors, or may accept paths that begin with any of a set of
- trust anchors.
-
- Section 6.2 describes methods for using the path validation algorithm
- in specific implementations.
-
- Section 6.3 describes the steps necessary to determine if a
- certificate is revoked when CRLs are the revocation mechanism used by
- the certificate issuer.
-
-6.1. Basic Path Validation
-
- This text describes an algorithm for X.509 path processing. A
- conforming implementation MUST include an X.509 path processing
- procedure that is functionally equivalent to the external behavior of
- this algorithm. However, support for some of the certificate
- extensions processed in this algorithm are OPTIONAL for compliant
- implementations. Clients that do not support these extensions MAY
- omit the corresponding steps in the path validation algorithm.
-
- For example, clients are not required to support the policy mappings
- extension. Clients that do not support this extension MAY omit the
- path validation steps where policy mappings are processed. Note that
- clients MUST reject the certificate if it contains an unsupported
- critical extension.
-
- While the certificate and CRL profiles specified in Sections 4 and 5
- of this document specify values for certificate and CRL fields and
- extensions that are considered to be appropriate for the Internet
- PKI, the algorithm presented in this section is not limited to
- accepting certificates and CRLs that conform to these profiles.
- Therefore, the algorithm only includes checks to verify that the
- certification path is valid according to X.509 and does not include
- checks to verify that the certificates and CRLs conform to this
- profile. While the algorithm could be extended to include checks for
- conformance to the profiles in Sections 4 and 5, this profile
- RECOMMENDS against including such checks.
-
- The algorithm presented in this section validates the certificate
- with respect to the current date and time. A conforming
- implementation MAY also support validation with respect to some point
- in the past. Note that mechanisms are not available for validating a
- certificate with respect to a time outside the certificate validity
- period.
-
-
-
-
-
-Cooper, et al. Standards Track [Page 72]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- The trust anchor is an input to the algorithm. There is no
- requirement that the same trust anchor be used to validate all
- certification paths. Different trust anchors MAY be used to validate
- different paths, as discussed further in Section 6.2.
-
- The primary goal of path validation is to verify the binding between
- a subject distinguished name or a subject alternative name and
- subject public key, as represented in the target certificate, based
- on the public key of the trust anchor. In most cases, the target
- certificate will be an end entity certificate, but the target
- certificate may be a CA certificate as long as the subject public key
- is to be used for a purpose other than verifying the signature on a
- public key certificate. Verifying the binding between the name and
- subject public key requires obtaining a sequence of certificates that
- support that binding. The procedure performed to obtain this
- sequence of certificates is outside the scope of this specification.
-
- To meet this goal, the path validation process verifies, among other
- things, that a prospective certification path (a sequence of n
- certificates) satisfies the following conditions:
-
- (a) for all x in {1, ..., n-1}, the subject of certificate x is
- the issuer of certificate x+1;
-
- (b) certificate 1 is issued by the trust anchor;
-
- (c) certificate n is the certificate to be validated (i.e., the
- target certificate); and
-
- (d) for all x in {1, ..., n}, the certificate was valid at the
- time in question.
-
- A certificate MUST NOT appear more than once in a prospective
- certification path.
-
- When the trust anchor is provided in the form of a self-signed
- certificate, this self-signed certificate is not included as part of
- the prospective certification path. Information about trust anchors
- is provided as inputs to the certification path validation algorithm
- (Section 6.1.1).
-
- A particular certification path may not, however, be appropriate for
- all applications. Therefore, an application MAY augment this
- algorithm to further limit the set of valid paths. The path
- validation process also determines the set of certificate policies
- that are valid for this path, based on the certificate policies
- extension, policy mappings extension, policy constraints extension,
- and inhibit anyPolicy extension. To achieve this, the path
-
-
-
-Cooper, et al. Standards Track [Page 73]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- validation algorithm constructs a valid policy tree. If the set of
- certificate policies that are valid for this path is not empty, then
- the result will be a valid policy tree of depth n, otherwise the
- result will be a null valid policy tree.
-
- A certificate is self-issued if the same DN appears in the subject
- and issuer fields (the two DNs are the same if they match according
- to the rules specified in Section 7.1). In general, the issuer and
- subject of the certificates that make up a path are different for
- each certificate. However, a CA may issue a certificate to itself to
- support key rollover or changes in certificate policies. These
- self-issued certificates are not counted when evaluating path length
- or name constraints.
-
- This section presents the algorithm in four basic steps: (1)
- initialization, (2) basic certificate processing, (3) preparation for
- the next certificate, and (4) wrap-up. Steps (1) and (4) are
- performed exactly once. Step (2) is performed for all certificates
- in the path. Step (3) is performed for all certificates in the path
- except the final certificate. Figure 2 provides a high-level
- flowchart of this algorithm.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Cooper, et al. Standards Track [Page 74]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- +-------+
- | START |
- +-------+
- |
- V
- +----------------+
- | Initialization |
- +----------------+
- |
- +<--------------------+
- | |
- V |
- +----------------+ |
- | Process Cert | |
- +----------------+ |
- | |
- V |
- +================+ |
- | IF Last Cert | |
- | in Path | |
- +================+ |
- | | |
- THEN | | ELSE |
- V V |
- +----------------+ +----------------+ |
- | Wrap up | | Prepare for | |
- +----------------+ | Next Cert | |
- | +----------------+ |
- V | |
- +-------+ +--------------+
- | STOP |
- +-------+
-
- Figure 2. Certification Path Processing Flowchart
-
-6.1.1. Inputs
-
- This algorithm assumes that the following nine inputs are provided to
- the path processing logic:
-
- (a) a prospective certification path of length n.
-
- (b) the current date/time.
-
-
-
-
-
-
-
-
-Cooper, et al. Standards Track [Page 75]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- (c) user-initial-policy-set: A set of certificate policy
- identifiers naming the policies that are acceptable to the
- certificate user. The user-initial-policy-set contains the
- special value any-policy if the user is not concerned about
- certificate policy.
-
- (d) trust anchor information, describing a CA that serves as a
- trust anchor for the certification path. The trust anchor
- information includes:
-
- (1) the trusted issuer name,
-
- (2) the trusted public key algorithm,
-
- (3) the trusted public key, and
-
- (4) optionally, the trusted public key parameters associated
- with the public key.
-
- The trust anchor information may be provided to the path
- processing procedure in the form of a self-signed certificate.
- When the trust anchor information is provided in the form of a
- certificate, the name in the subject field is used as the trusted
- issuer name and the contents of the subjectPublicKeyInfo field is
- used as the source of the trusted public key algorithm and the
- trusted public key. The trust anchor information is trusted
- because it was delivered to the path processing procedure by some
- trustworthy out-of-band procedure. If the trusted public key
- algorithm requires parameters, then the parameters are provided
- along with the trusted public key.
-
- (e) initial-policy-mapping-inhibit, which indicates if policy
- mapping is allowed in the certification path.
-
- (f) initial-explicit-policy, which indicates if the path must be
- valid for at least one of the certificate policies in the
- user-initial-policy-set.
-
- (g) initial-any-policy-inhibit, which indicates whether the
- anyPolicy OID should be processed if it is included in a
- certificate.
-
- (h) initial-permitted-subtrees, which indicates for each name
- type (e.g., X.500 distinguished names, email addresses, or IP
- addresses) a set of subtrees within which all subject names
- in every certificate in the certification path MUST fall.
- The initial-permitted-subtrees input includes a set for each
- name type. For each name type, the set may consist of a
-
-
-
-Cooper, et al. Standards Track [Page 76]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- single subtree that includes all names of that name type or
- one or more subtrees that each specifies a subset of the
- names of that name type, or the set may be empty. If the set
- for a name type is empty, then the certification path will be
- considered invalid if any certificate in the certification
- path includes a name of that name type.
-
- (i) initial-excluded-subtrees, which indicates for each name type
- (e.g., X.500 distinguished names, email addresses, or IP
- addresses) a set of subtrees within which no subject name in
- any certificate in the certification path may fall. The
- initial-excluded-subtrees input includes a set for each name
- type. For each name type, the set may be empty or may
- consist of one or more subtrees that each specifies a subset
- of the names of that name type. If the set for a name type
- is empty, then no names of that name type are excluded.
-
- Conforming implementations are not required to support the setting of
- all of these inputs. For example, a conforming implementation may be
- designed to validate all certification paths using a value of FALSE
- for initial-any-policy-inhibit.
-
-6.1.2. Initialization
-
- This initialization phase establishes eleven state variables based
- upon the nine inputs:
-
- (a) valid_policy_tree: A tree of certificate policies with their
- optional qualifiers; each of the leaves of the tree
- represents a valid policy at this stage in the certification
- path validation. If valid policies exist at this stage in
- the certification path validation, the depth of the tree is
- equal to the number of certificates in the chain that have
- been processed. If valid policies do not exist at this stage
- in the certification path validation, the tree is set to
- NULL. Once the tree is set to NULL, policy processing
- ceases.
-
- Each node in the valid_policy_tree includes three data
- objects: the valid policy, a set of associated policy
- qualifiers, and a set of one or more expected policy values.
- If the node is at depth x, the components of the node have
- the following semantics:
-
- (1) The valid_policy is a single policy OID representing a
- valid policy for the path of length x.
-
-
-
-
-
-Cooper, et al. Standards Track [Page 77]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- (2) The qualifier_set is a set of policy qualifiers associated
- with the valid policy in certificate x.
-
- (3) The expected_policy_set contains one or more policy OIDs
- that would satisfy this policy in the certificate x+1.
-
- The initial value of the valid_policy_tree is a single node with
- valid_policy anyPolicy, an empty qualifier_set, and an
- expected_policy_set with the single value anyPolicy. This node is
- considered to be at depth zero.
-
- Figure 3 is a graphic representation of the initial state of the
- valid_policy_tree. Additional figures will use this format to
- describe changes in the valid_policy_tree during path processing.
-
- +----------------+
- | anyPolicy | <---- valid_policy
- +----------------+
- | {} | <---- qualifier_set
- +----------------+
- | {anyPolicy} | <---- expected_policy_set
- +----------------+
-
- Figure 3. Initial Value of the valid_policy_tree State Variable
-
- (b) permitted_subtrees: a set of root names for each name type
- (e.g., X.500 distinguished names, email addresses, or IP
- addresses) defining a set of subtrees within which all
- subject names in subsequent certificates in the certification
- path MUST fall. This variable includes a set for each name
- type, and the initial value is initial-permitted-subtrees.
-
- (c) excluded_subtrees: a set of root names for each name type
- (e.g., X.500 distinguished names, email addresses, or IP
- addresses) defining a set of subtrees within which no subject
- name in subsequent certificates in the certification path may
- fall. This variable includes a set for each name type, and
- the initial value is initial-excluded-subtrees.
-
- (d) explicit_policy: an integer that indicates if a non-NULL
- valid_policy_tree is required. The integer indicates the
- number of non-self-issued certificates to be processed before
- this requirement is imposed. Once set, this variable may be
- decreased, but may not be increased. That is, if a
- certificate in the path requires a non-NULL
- valid_policy_tree, a later certificate cannot remove this
- requirement. If initial-explicit-policy is set, then the
- initial value is 0, otherwise the initial value is n+1.
-
-
-
-Cooper, et al. Standards Track [Page 78]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- (e) inhibit_anyPolicy: an integer that indicates whether the
- anyPolicy policy identifier is considered a match. The
- integer indicates the number of non-self-issued certificates
- to be processed before the anyPolicy OID, if asserted in a
- certificate other than an intermediate self-issued
- certificate, is ignored. Once set, this variable may be
- decreased, but may not be increased. That is, if a
- certificate in the path inhibits processing of anyPolicy, a
- later certificate cannot permit it. If initial-any-policy-
- inhibit is set, then the initial value is 0, otherwise the
- initial value is n+1.
-
- (f) policy_mapping: an integer that indicates if policy mapping
- is permitted. The integer indicates the number of non-self-
- issued certificates to be processed before policy mapping is
- inhibited. Once set, this variable may be decreased, but may
- not be increased. That is, if a certificate in the path
- specifies that policy mapping is not permitted, it cannot be
- overridden by a later certificate. If initial-policy-
- mapping-inhibit is set, then the initial value is 0,
- otherwise the initial value is n+1.
-
- (g) working_public_key_algorithm: the digital signature
- algorithm used to verify the signature of a certificate. The
- working_public_key_algorithm is initialized from the trusted
- public key algorithm provided in the trust anchor
- information.
-
- (h) working_public_key: the public key used to verify the
- signature of a certificate. The working_public_key is
- initialized from the trusted public key provided in the trust
- anchor information.
-
- (i) working_public_key_parameters: parameters associated with
- the current public key that may be required to verify a
- signature (depending upon the algorithm). The
- working_public_key_parameters variable is initialized from
- the trusted public key parameters provided in the trust
- anchor information.
-
- (j) working_issuer_name: the issuer distinguished name expected
- in the next certificate in the chain. The
- working_issuer_name is initialized to the trusted issuer name
- provided in the trust anchor information.
-
-
-
-
-
-
-
-Cooper, et al. Standards Track [Page 79]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- (k) max_path_length: this integer is initialized to n, is
- decremented for each non-self-issued certificate in the path,
- and may be reduced to the value in the path length constraint
- field within the basic constraints extension of a CA
- certificate.
-
- Upon completion of the initialization steps, perform the basic
- certificate processing steps specified in 6.1.3.
-
-6.1.3. Basic Certificate Processing
-
- The basic path processing actions to be performed for certificate i
- (for all i in [1..n]) are listed below.
-
- (a) Verify the basic certificate information. The certificate
- MUST satisfy each of the following:
-
- (1) The signature on the certificate can be verified using
- working_public_key_algorithm, the working_public_key, and
- the working_public_key_parameters.
-
- (2) The certificate validity period includes the current time.
-
- (3) At the current time, the certificate is not revoked. This
- may be determined by obtaining the appropriate CRL
- (Section 6.3), by status information, or by out-of-band
- mechanisms.
-
- (4) The certificate issuer name is the working_issuer_name.
-
- (b) If certificate i is self-issued and it is not the final
- certificate in the path, skip this step for certificate i.
- Otherwise, verify that the subject name is within one of the
- permitted_subtrees for X.500 distinguished names, and verify
- that each of the alternative names in the subjectAltName
- extension (critical or non-critical) is within one of the
- permitted_subtrees for that name type.
-
- (c) If certificate i is self-issued and it is not the final
- certificate in the path, skip this step for certificate i.
- Otherwise, verify that the subject name is not within any of
- the excluded_subtrees for X.500 distinguished names, and
- verify that each of the alternative names in the
- subjectAltName extension (critical or non-critical) is not
- within any of the excluded_subtrees for that name type.
-
-
-
-
-
-
-Cooper, et al. Standards Track [Page 80]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- (d) If the certificate policies extension is present in the
- certificate and the valid_policy_tree is not NULL, process
- the policy information by performing the following steps in
- order:
-
- (1) For each policy P not equal to anyPolicy in the
- certificate policies extension, let P-OID denote the OID
- for policy P and P-Q denote the qualifier set for policy
- P. Perform the following steps in order:
-
- (i) For each node of depth i-1 in the valid_policy_tree
- where P-OID is in the expected_policy_set, create a
- child node as follows: set the valid_policy to P-OID,
- set the qualifier_set to P-Q, and set the
- expected_policy_set to
- {P-OID}.
-
- For example, consider a valid_policy_tree with a node
- of depth i-1 where the expected_policy_set is {Gold,
- White}. Assume the certificate policies Gold and
- Silver appear in the certificate policies extension of
- certificate i. The Gold policy is matched, but the
- Silver policy is not. This rule will generate a child
- node of depth i for the Gold policy. The result is
- shown as Figure 4.
-
- +-----------------+
- | Red |
- +-----------------+
- | {} |
- +-----------------+ node of depth i-1
- | {Gold, White} |
- +-----------------+
- |
- |
- |
- V
- +-----------------+
- | Gold |
- +-----------------+
- | {} |
- +-----------------+ node of depth i
- | {Gold} |
- +-----------------+
-
- Figure 4. Processing an Exact Match
-
-
-
-
-
-Cooper, et al. Standards Track [Page 81]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- (ii) If there was no match in step (i) and the
- valid_policy_tree includes a node of depth i-1 with
- the valid_policy anyPolicy, generate a child node with
- the following values: set the valid_policy to P-OID,
- set the qualifier_set to P-Q, and set the
- expected_policy_set to {P-OID}.
-
- For example, consider a valid_policy_tree with a node
- of depth i-1 where the valid_policy is anyPolicy.
- Assume the certificate policies Gold and Silver appear
- in the certificate policies extension of certificate
- i. The Gold policy does not have a qualifier, but the
- Silver policy has the qualifier Q-Silver. If Gold and
- Silver were not matched in (i) above, this rule will
- generate two child nodes of depth i, one for each
- policy. The result is shown as Figure 5.
-
- +-----------------+
- | anyPolicy |
- +-----------------+
- | {} |
- +-----------------+ node of depth i-1
- | {anyPolicy} |
- +-----------------+
- / \
- / \
- / \
- / \
- +-----------------+ +-----------------+
- | Gold | | Silver |
- +-----------------+ +-----------------+
- | {} | | {Q-Silver} |
- +-----------------+ nodes of +-----------------+
- | {Gold} | depth i | {Silver} |
- +-----------------+ +-----------------+
-
- Figure 5. Processing Unmatched Policies when a
- Leaf Node Specifies anyPolicy
-
- (2) If the certificate policies extension includes the policy
- anyPolicy with the qualifier set AP-Q and either (a)
- inhibit_anyPolicy is greater than 0 or (b) i.
-
- [RFC1422] Kent, S., "Privacy Enhancement for Internet Electronic
- Mail: Part II: Certificate-Based Key Management", RFC
- 1422, February 1993.
-
- [RFC2277] Alvestrand, H., "IETF Policy on Character Sets and
- Languages", BCP 18, RFC 2277, January 1998.
-
- [RFC2459] Housley, R., Ford, W., Polk, W., and D. Solo, "Internet
- X.509 Public Key Infrastructure Certificate and CRL
- Profile", RFC 2459, January 1999.
-
- [RFC2560] Myers, M., Ankney, R., Malpani, A., Galperin, S., and C.
- Adams, "X.509 Internet Public Key Infrastructure Online
- Certificate Status Protocol - OCSP", RFC 2560, June 1999.
-
- [RFC2985] Nystrom, M. and B. Kaliski, "PKCS #9: Selected Object
- Classes and Attribute Types Version 2.0", RFC 2985,
- November 2000.
-
- [RFC3161] Adams, C., Cain, P., Pinkas, D., and R. Zuccherato,
- "Internet X.509 Public Key Infrastructure Time-Stamp
- Protocol (TSP)", RFC 3161, August 2001.
-
- [RFC3279] Bassham, L., Polk, W., and R. Housley, "Algorithms and
- Identifiers for the Internet X.509 Public Key
- Infrastructure Certificate and Certificate Revocation List
- (CRL) Profile", RFC 3279, April 2002.
-
-
-
-
-
-Cooper, et al. Standards Track [Page 107]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- [RFC3280] Housley, R., Polk, W., Ford, W., and D. Solo, "Internet
- X.509 Public Key Infrastructure Certificate and
- Certificate Revocation List (CRL) Profile", RFC 3280,
- April 2002.
-
- [RFC4055] Schaad, J., Kaliski, B., and R. Housley, "Additional
- Algorithms and Identifiers for RSA Cryptography for use in
- the Internet X.509 Public Key Infrastructure Certificate
- and Certificate Revocation List (CRL) Profile", RFC 4055,
- June 2005.
-
- [RFC4120] Neuman, C., Yu, T., Hartman, S., and K. Raeburn, "The
- Kerberos Network Authentication Service (V5)", RFC 4120,
- July 2005.
-
- [RFC4210] Adams, C., Farrell, S., Kause, T., and T. Mononen,
- "Internet X.509 Public Key Infrastructure Certificate
- Management Protocol (CMP)", RFC 4210, September 2005.
-
- [RFC4325] Santesson, S. and R. Housley, "Internet X.509 Public Key
- Infrastructure Authority Information Access Certificate
- Revocation List (CRL) Extension", RFC 4325, December 2005.
-
- [RFC4491] Leontiev, S., Ed., and D. Shefanovski, Ed., "Using the
- GOST R 34.10-94, GOST R 34.10-2001, and GOST R 34.11-94
- Algorithms with the Internet X.509 Public Key
- Infrastructure Certificate and CRL Profile", RFC 4491, May
- 2006.
-
- [RFC4510] Zeilenga, K., Ed., "Lightweight Directory Access Protocol
- (LDAP): Technical Specification Road Map", RFC 4510, June
- 2006.
-
- [RFC4512] Zeilenga, K., Ed., "Lightweight Directory Access Protocol
- (LDAP): Directory Information Models", RFC 4512, June
- 2006.
-
- [RFC4514] Zeilenga, K., Ed., "Lightweight Directory Access Protocol
- (LDAP): String Representation of Distinguished Names", RFC
- 4514, June 2006.
-
- [RFC4519] Sciberras, A., Ed., "Lightweight Directory Access Protocol
- (LDAP): Schema for User Applications", RFC 4519, June
- 2006.
-
-
-
-
-
-
-
-Cooper, et al. Standards Track [Page 108]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- [RFC4630] Housley, R. and S. Santesson, "Update to DirectoryString
- Processing in the Internet X.509 Public Key Infrastructure
- Certificate and Certificate Revocation List (CRL)
- Profile", RFC 4630, August 2006.
-
- [X.500] ITU-T Recommendation X.500 (2005) | ISO/IEC 9594-1:2005,
- Information technology - Open Systems Interconnection -
- The Directory: Overview of concepts, models and services.
-
- [X.501] ITU-T Recommendation X.501 (2005) | ISO/IEC 9594-2:2005,
- Information technology - Open Systems Interconnection -
- The Directory: Models.
-
- [X.509] ITU-T Recommendation X.509 (2005) | ISO/IEC 9594-8:2005,
- Information technology - Open Systems Interconnection -
- The Directory: Public-key and attribute certificate
- frameworks.
-
- [X.520] ITU-T Recommendation X.520 (2005) | ISO/IEC 9594-6:2005,
- Information technology - Open Systems Interconnection -
- The Directory: Selected attribute types.
-
- [X.660] ITU-T Recommendation X.660 (2004) | ISO/IEC 9834-1:2005,
- Information technology - Open Systems Interconnection -
- Procedures for the operation of OSI Registration
- Authorities: General procedures, and top arcs of the ASN.1
- Object Identifier tree.
-
- [X.683] ITU-T Recommendation X.683 (2002) | ISO/IEC 8824-4:2002,
- Information technology - Abstract Syntax Notation One
- (ASN.1): Parameterization of ASN.1 specifications.
-
- [X9.55] ANSI X9.55-1997, Public Key Cryptography for the Financial
- Services Industry: Extensions to Public Key Certificates
- and Certificate Revocation Lists, January 1997.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Cooper, et al. Standards Track [Page 109]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
-Appendix A. Pseudo-ASN.1 Structures and OIDs
-
- This appendix describes data objects used by conforming PKI
- components in an "ASN.1-like" syntax. This syntax is a hybrid of the
- 1988 and 1993 ASN.1 syntaxes. The 1988 ASN.1 syntax is augmented
- with 1993 UNIVERSAL Types UniversalString, BMPString, and UTF8String.
-
- The ASN.1 syntax does not permit the inclusion of type statements in
- the ASN.1 module, and the 1993 ASN.1 standard does not permit use of
- the new UNIVERSAL types in modules using the 1988 syntax. As a
- result, this module does not conform to either version of the ASN.1
- standard.
-
- This appendix may be converted into 1988 ASN.1 by replacing the
- definitions for the UNIVERSAL Types with the 1988 catch-all "ANY".
-
-A.1. Explicitly Tagged Module, 1988 Syntax
-
-PKIX1Explicit88 { iso(1) identified-organization(3) dod(6) internet(1)
- security(5) mechanisms(5) pkix(7) id-mod(0) id-pkix1-explicit(18) }
-
-DEFINITIONS EXPLICIT TAGS ::=
-
-BEGIN
-
--- EXPORTS ALL --
-
--- IMPORTS NONE --
-
--- UNIVERSAL Types defined in 1993 and 1998 ASN.1
--- and required by this specification
-
-UniversalString ::= [UNIVERSAL 28] IMPLICIT OCTET STRING
- -- UniversalString is defined in ASN.1:1993
-
-BMPString ::= [UNIVERSAL 30] IMPLICIT OCTET STRING
- -- BMPString is the subtype of UniversalString and models
- -- the Basic Multilingual Plane of ISO/IEC 10646
-
-UTF8String ::= [UNIVERSAL 12] IMPLICIT OCTET STRING
- -- The content of this type conforms to RFC 3629.
-
--- PKIX specific OIDs
-
-id-pkix OBJECT IDENTIFIER ::=
- { iso(1) identified-organization(3) dod(6) internet(1)
- security(5) mechanisms(5) pkix(7) }
-
-
-
-
-Cooper, et al. Standards Track [Page 110]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
--- PKIX arcs
-
-id-pe OBJECT IDENTIFIER ::= { id-pkix 1 }
- -- arc for private certificate extensions
-id-qt OBJECT IDENTIFIER ::= { id-pkix 2 }
- -- arc for policy qualifier types
-id-kp OBJECT IDENTIFIER ::= { id-pkix 3 }
- -- arc for extended key purpose OIDS
-id-ad OBJECT IDENTIFIER ::= { id-pkix 48 }
- -- arc for access descriptors
-
--- policyQualifierIds for Internet policy qualifiers
-
-id-qt-cps OBJECT IDENTIFIER ::= { id-qt 1 }
- -- OID for CPS qualifier
-id-qt-unotice OBJECT IDENTIFIER ::= { id-qt 2 }
- -- OID for user notice qualifier
-
--- access descriptor definitions
-
-id-ad-ocsp OBJECT IDENTIFIER ::= { id-ad 1 }
-id-ad-caIssuers OBJECT IDENTIFIER ::= { id-ad 2 }
-id-ad-timeStamping OBJECT IDENTIFIER ::= { id-ad 3 }
-id-ad-caRepository OBJECT IDENTIFIER ::= { id-ad 5 }
-
--- attribute data types
-
-Attribute ::= SEQUENCE {
- type AttributeType,
- values SET OF AttributeValue }
- -- at least one value is required
-
-AttributeType ::= OBJECT IDENTIFIER
-
-AttributeValue ::= ANY -- DEFINED BY AttributeType
-
-AttributeTypeAndValue ::= SEQUENCE {
- type AttributeType,
- value AttributeValue }
-
--- suggested naming attributes: Definition of the following
--- information object set may be augmented to meet local
--- requirements. Note that deleting members of the set may
--- prevent interoperability with conforming implementations.
--- presented in pairs: the AttributeType followed by the
--- type definition for the corresponding AttributeValue
-
-
-
-
-
-Cooper, et al. Standards Track [Page 111]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
--- Arc for standard naming attributes
-
-id-at OBJECT IDENTIFIER ::= { joint-iso-ccitt(2) ds(5) 4 }
-
--- Naming attributes of type X520name
-
-id-at-name AttributeType ::= { id-at 41 }
-id-at-surname AttributeType ::= { id-at 4 }
-id-at-givenName AttributeType ::= { id-at 42 }
-id-at-initials AttributeType ::= { id-at 43 }
-id-at-generationQualifier AttributeType ::= { id-at 44 }
-
--- Naming attributes of type X520Name:
--- X520name ::= DirectoryString (SIZE (1..ub-name))
---
--- Expanded to avoid parameterized type:
-X520name ::= CHOICE {
- teletexString TeletexString (SIZE (1..ub-name)),
- printableString PrintableString (SIZE (1..ub-name)),
- universalString UniversalString (SIZE (1..ub-name)),
- utf8String UTF8String (SIZE (1..ub-name)),
- bmpString BMPString (SIZE (1..ub-name)) }
-
--- Naming attributes of type X520CommonName
-
-id-at-commonName AttributeType ::= { id-at 3 }
-
--- Naming attributes of type X520CommonName:
--- X520CommonName ::= DirectoryName (SIZE (1..ub-common-name))
---
--- Expanded to avoid parameterized type:
-X520CommonName ::= CHOICE {
- teletexString TeletexString (SIZE (1..ub-common-name)),
- printableString PrintableString (SIZE (1..ub-common-name)),
- universalString UniversalString (SIZE (1..ub-common-name)),
- utf8String UTF8String (SIZE (1..ub-common-name)),
- bmpString BMPString (SIZE (1..ub-common-name)) }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Cooper, et al. Standards Track [Page 112]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
--- Naming attributes of type X520LocalityName
-
-id-at-localityName AttributeType ::= { id-at 7 }
-
--- Naming attributes of type X520LocalityName:
--- X520LocalityName ::= DirectoryName (SIZE (1..ub-locality-name))
---
--- Expanded to avoid parameterized type:
-X520LocalityName ::= CHOICE {
- teletexString TeletexString (SIZE (1..ub-locality-name)),
- printableString PrintableString (SIZE (1..ub-locality-name)),
- universalString UniversalString (SIZE (1..ub-locality-name)),
- utf8String UTF8String (SIZE (1..ub-locality-name)),
- bmpString BMPString (SIZE (1..ub-locality-name)) }
-
--- Naming attributes of type X520StateOrProvinceName
-
-id-at-stateOrProvinceName AttributeType ::= { id-at 8 }
-
--- Naming attributes of type X520StateOrProvinceName:
--- X520StateOrProvinceName ::= DirectoryName (SIZE (1..ub-state-name))
---
--- Expanded to avoid parameterized type:
-X520StateOrProvinceName ::= CHOICE {
- teletexString TeletexString (SIZE (1..ub-state-name)),
- printableString PrintableString (SIZE (1..ub-state-name)),
- universalString UniversalString (SIZE (1..ub-state-name)),
- utf8String UTF8String (SIZE (1..ub-state-name)),
- bmpString BMPString (SIZE (1..ub-state-name)) }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Cooper, et al. Standards Track [Page 113]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
--- Naming attributes of type X520OrganizationName
-
-id-at-organizationName AttributeType ::= { id-at 10 }
-
--- Naming attributes of type X520OrganizationName:
--- X520OrganizationName ::=
--- DirectoryName (SIZE (1..ub-organization-name))
---
--- Expanded to avoid parameterized type:
-X520OrganizationName ::= CHOICE {
- teletexString TeletexString
- (SIZE (1..ub-organization-name)),
- printableString PrintableString
- (SIZE (1..ub-organization-name)),
- universalString UniversalString
- (SIZE (1..ub-organization-name)),
- utf8String UTF8String
- (SIZE (1..ub-organization-name)),
- bmpString BMPString
- (SIZE (1..ub-organization-name)) }
-
--- Naming attributes of type X520OrganizationalUnitName
-
-id-at-organizationalUnitName AttributeType ::= { id-at 11 }
-
--- Naming attributes of type X520OrganizationalUnitName:
--- X520OrganizationalUnitName ::=
--- DirectoryName (SIZE (1..ub-organizational-unit-name))
---
--- Expanded to avoid parameterized type:
-X520OrganizationalUnitName ::= CHOICE {
- teletexString TeletexString
- (SIZE (1..ub-organizational-unit-name)),
- printableString PrintableString
- (SIZE (1..ub-organizational-unit-name)),
- universalString UniversalString
- (SIZE (1..ub-organizational-unit-name)),
- utf8String UTF8String
- (SIZE (1..ub-organizational-unit-name)),
- bmpString BMPString
- (SIZE (1..ub-organizational-unit-name)) }
-
-
-
-
-
-
-
-
-
-
-Cooper, et al. Standards Track [Page 114]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
--- Naming attributes of type X520Title
-
-id-at-title AttributeType ::= { id-at 12 }
-
--- Naming attributes of type X520Title:
--- X520Title ::= DirectoryName (SIZE (1..ub-title))
---
--- Expanded to avoid parameterized type:
-X520Title ::= CHOICE {
- teletexString TeletexString (SIZE (1..ub-title)),
- printableString PrintableString (SIZE (1..ub-title)),
- universalString UniversalString (SIZE (1..ub-title)),
- utf8String UTF8String (SIZE (1..ub-title)),
- bmpString BMPString (SIZE (1..ub-title)) }
-
--- Naming attributes of type X520dnQualifier
-
-id-at-dnQualifier AttributeType ::= { id-at 46 }
-
-X520dnQualifier ::= PrintableString
-
--- Naming attributes of type X520countryName (digraph from IS 3166)
-
-id-at-countryName AttributeType ::= { id-at 6 }
-
-X520countryName ::= PrintableString (SIZE (2))
-
--- Naming attributes of type X520SerialNumber
-
-id-at-serialNumber AttributeType ::= { id-at 5 }
-
-X520SerialNumber ::= PrintableString (SIZE (1..ub-serial-number))
-
--- Naming attributes of type X520Pseudonym
-
-id-at-pseudonym AttributeType ::= { id-at 65 }
-
--- Naming attributes of type X520Pseudonym:
--- X520Pseudonym ::= DirectoryName (SIZE (1..ub-pseudonym))
---
--- Expanded to avoid parameterized type:
-X520Pseudonym ::= CHOICE {
- teletexString TeletexString (SIZE (1..ub-pseudonym)),
- printableString PrintableString (SIZE (1..ub-pseudonym)),
- universalString UniversalString (SIZE (1..ub-pseudonym)),
- utf8String UTF8String (SIZE (1..ub-pseudonym)),
- bmpString BMPString (SIZE (1..ub-pseudonym)) }
-
-
-
-
-Cooper, et al. Standards Track [Page 115]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
--- Naming attributes of type DomainComponent (from RFC 4519)
-
-id-domainComponent AttributeType ::= { 0 9 2342 19200300 100 1 25 }
-
-DomainComponent ::= IA5String
-
--- Legacy attributes
-
-pkcs-9 OBJECT IDENTIFIER ::=
- { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) 9 }
-
-id-emailAddress AttributeType ::= { pkcs-9 1 }
-
-EmailAddress ::= IA5String (SIZE (1..ub-emailaddress-length))
-
--- naming data types --
-
-Name ::= CHOICE { -- only one possibility for now --
- rdnSequence RDNSequence }
-
-RDNSequence ::= SEQUENCE OF RelativeDistinguishedName
-
-DistinguishedName ::= RDNSequence
-
-RelativeDistinguishedName ::= SET SIZE (1..MAX) OF AttributeTypeAndValue
-
--- Directory string type --
-
-DirectoryString ::= CHOICE {
- teletexString TeletexString (SIZE (1..MAX)),
- printableString PrintableString (SIZE (1..MAX)),
- universalString UniversalString (SIZE (1..MAX)),
- utf8String UTF8String (SIZE (1..MAX)),
- bmpString BMPString (SIZE (1..MAX)) }
-
--- certificate and CRL specific structures begin here
-
-Certificate ::= SEQUENCE {
- tbsCertificate TBSCertificate,
- signatureAlgorithm AlgorithmIdentifier,
- signature BIT STRING }
-
-
-
-
-
-
-
-
-
-
-Cooper, et al. Standards Track [Page 116]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
-TBSCertificate ::= SEQUENCE {
- version [0] Version DEFAULT v1,
- serialNumber CertificateSerialNumber,
- signature AlgorithmIdentifier,
- issuer Name,
- validity Validity,
- subject Name,
- subjectPublicKeyInfo SubjectPublicKeyInfo,
- issuerUniqueID [1] IMPLICIT UniqueIdentifier OPTIONAL,
- -- If present, version MUST be v2 or v3
- subjectUniqueID [2] IMPLICIT UniqueIdentifier OPTIONAL,
- -- If present, version MUST be v2 or v3
- extensions [3] Extensions OPTIONAL
- -- If present, version MUST be v3 -- }
-
-Version ::= INTEGER { v1(0), v2(1), v3(2) }
-
-CertificateSerialNumber ::= INTEGER
-
-Validity ::= SEQUENCE {
- notBefore Time,
- notAfter Time }
-
-Time ::= CHOICE {
- utcTime UTCTime,
- generalTime GeneralizedTime }
-
-UniqueIdentifier ::= BIT STRING
-
-SubjectPublicKeyInfo ::= SEQUENCE {
- algorithm AlgorithmIdentifier,
- subjectPublicKey BIT STRING }
-
-Extensions ::= SEQUENCE SIZE (1..MAX) OF Extension
-
-Extension ::= SEQUENCE {
- extnID OBJECT IDENTIFIER,
- critical BOOLEAN DEFAULT FALSE,
- extnValue OCTET STRING
- -- contains the DER encoding of an ASN.1 value
- -- corresponding to the extension type identified
- -- by extnID
- }
-
-
-
-
-
-
-
-
-Cooper, et al. Standards Track [Page 117]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
--- CRL structures
-
-CertificateList ::= SEQUENCE {
- tbsCertList TBSCertList,
- signatureAlgorithm AlgorithmIdentifier,
- signature BIT STRING }
-
-TBSCertList ::= SEQUENCE {
- version Version OPTIONAL,
- -- if present, MUST be v2
- signature AlgorithmIdentifier,
- issuer Name,
- thisUpdate Time,
- nextUpdate Time OPTIONAL,
- revokedCertificates SEQUENCE OF SEQUENCE {
- userCertificate CertificateSerialNumber,
- revocationDate Time,
- crlEntryExtensions Extensions OPTIONAL
- -- if present, version MUST be v2
- } OPTIONAL,
- crlExtensions [0] Extensions OPTIONAL }
- -- if present, version MUST be v2
-
--- Version, Time, CertificateSerialNumber, and Extensions were
--- defined earlier for use in the certificate structure
-
-AlgorithmIdentifier ::= SEQUENCE {
- algorithm OBJECT IDENTIFIER,
- parameters ANY DEFINED BY algorithm OPTIONAL }
- -- contains a value of the type
- -- registered for use with the
- -- algorithm object identifier value
-
--- X.400 address syntax starts here
-
-ORAddress ::= SEQUENCE {
- built-in-standard-attributes BuiltInStandardAttributes,
- built-in-domain-defined-attributes
- BuiltInDomainDefinedAttributes OPTIONAL,
- -- see also teletex-domain-defined-attributes
- extension-attributes ExtensionAttributes OPTIONAL }
-
-
-
-
-
-
-
-
-
-
-Cooper, et al. Standards Track [Page 118]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
--- Built-in Standard Attributes
-
-BuiltInStandardAttributes ::= SEQUENCE {
- country-name CountryName OPTIONAL,
- administration-domain-name AdministrationDomainName OPTIONAL,
- network-address [0] IMPLICIT NetworkAddress OPTIONAL,
- -- see also extended-network-address
- terminal-identifier [1] IMPLICIT TerminalIdentifier OPTIONAL,
- private-domain-name [2] PrivateDomainName OPTIONAL,
- organization-name [3] IMPLICIT OrganizationName OPTIONAL,
- -- see also teletex-organization-name
- numeric-user-identifier [4] IMPLICIT NumericUserIdentifier
- OPTIONAL,
- personal-name [5] IMPLICIT PersonalName OPTIONAL,
- -- see also teletex-personal-name
- organizational-unit-names [6] IMPLICIT OrganizationalUnitNames
- OPTIONAL }
- -- see also teletex-organizational-unit-names
-
-CountryName ::= [APPLICATION 1] CHOICE {
- x121-dcc-code NumericString
- (SIZE (ub-country-name-numeric-length)),
- iso-3166-alpha2-code PrintableString
- (SIZE (ub-country-name-alpha-length)) }
-
-AdministrationDomainName ::= [APPLICATION 2] CHOICE {
- numeric NumericString (SIZE (0..ub-domain-name-length)),
- printable PrintableString (SIZE (0..ub-domain-name-length)) }
-
-NetworkAddress ::= X121Address -- see also extended-network-address
-
-X121Address ::= NumericString (SIZE (1..ub-x121-address-length))
-
-TerminalIdentifier ::= PrintableString (SIZE (1..ub-terminal-id-length))
-
-PrivateDomainName ::= CHOICE {
- numeric NumericString (SIZE (1..ub-domain-name-length)),
- printable PrintableString (SIZE (1..ub-domain-name-length)) }
-
-OrganizationName ::= PrintableString
- (SIZE (1..ub-organization-name-length))
- -- see also teletex-organization-name
-
-NumericUserIdentifier ::= NumericString
- (SIZE (1..ub-numeric-user-id-length))
-
-
-
-
-
-
-Cooper, et al. Standards Track [Page 119]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
-PersonalName ::= SET {
- surname [0] IMPLICIT PrintableString
- (SIZE (1..ub-surname-length)),
- given-name [1] IMPLICIT PrintableString
- (SIZE (1..ub-given-name-length)) OPTIONAL,
- initials [2] IMPLICIT PrintableString
- (SIZE (1..ub-initials-length)) OPTIONAL,
- generation-qualifier [3] IMPLICIT PrintableString
- (SIZE (1..ub-generation-qualifier-length))
- OPTIONAL }
- -- see also teletex-personal-name
-
-OrganizationalUnitNames ::= SEQUENCE SIZE (1..ub-organizational-units)
- OF OrganizationalUnitName
- -- see also teletex-organizational-unit-names
-
-OrganizationalUnitName ::= PrintableString (SIZE
- (1..ub-organizational-unit-name-length))
-
--- Built-in Domain-defined Attributes
-
-BuiltInDomainDefinedAttributes ::= SEQUENCE SIZE
- (1..ub-domain-defined-attributes) OF
- BuiltInDomainDefinedAttribute
-
-BuiltInDomainDefinedAttribute ::= SEQUENCE {
- type PrintableString (SIZE
- (1..ub-domain-defined-attribute-type-length)),
- value PrintableString (SIZE
- (1..ub-domain-defined-attribute-value-length)) }
-
--- Extension Attributes
-
-ExtensionAttributes ::= SET SIZE (1..ub-extension-attributes) OF
- ExtensionAttribute
-
-ExtensionAttribute ::= SEQUENCE {
- extension-attribute-type [0] IMPLICIT INTEGER
- (0..ub-extension-attributes),
- extension-attribute-value [1]
- ANY DEFINED BY extension-attribute-type }
-
--- Extension types and attribute values
-
-common-name INTEGER ::= 1
-
-CommonName ::= PrintableString (SIZE (1..ub-common-name-length))
-
-
-
-
-Cooper, et al. Standards Track [Page 120]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
-teletex-common-name INTEGER ::= 2
-
-TeletexCommonName ::= TeletexString (SIZE (1..ub-common-name-length))
-
-teletex-organization-name INTEGER ::= 3
-
-TeletexOrganizationName ::=
- TeletexString (SIZE (1..ub-organization-name-length))
-
-teletex-personal-name INTEGER ::= 4
-
-TeletexPersonalName ::= SET {
- surname [0] IMPLICIT TeletexString
- (SIZE (1..ub-surname-length)),
- given-name [1] IMPLICIT TeletexString
- (SIZE (1..ub-given-name-length)) OPTIONAL,
- initials [2] IMPLICIT TeletexString
- (SIZE (1..ub-initials-length)) OPTIONAL,
- generation-qualifier [3] IMPLICIT TeletexString
- (SIZE (1..ub-generation-qualifier-length))
- OPTIONAL }
-
-teletex-organizational-unit-names INTEGER ::= 5
-
-TeletexOrganizationalUnitNames ::= SEQUENCE SIZE
- (1..ub-organizational-units) OF TeletexOrganizationalUnitName
-
-TeletexOrganizationalUnitName ::= TeletexString
- (SIZE (1..ub-organizational-unit-name-length))
-
-pds-name INTEGER ::= 7
-
-PDSName ::= PrintableString (SIZE (1..ub-pds-name-length))
-
-physical-delivery-country-name INTEGER ::= 8
-
-PhysicalDeliveryCountryName ::= CHOICE {
- x121-dcc-code NumericString (SIZE (ub-country-name-numeric-length)),
- iso-3166-alpha2-code PrintableString
- (SIZE (ub-country-name-alpha-length)) }
-
-postal-code INTEGER ::= 9
-
-PostalCode ::= CHOICE {
- numeric-code NumericString (SIZE (1..ub-postal-code-length)),
- printable-code PrintableString (SIZE (1..ub-postal-code-length)) }
-
-physical-delivery-office-name INTEGER ::= 10
-
-
-
-Cooper, et al. Standards Track [Page 121]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
-PhysicalDeliveryOfficeName ::= PDSParameter
-
-physical-delivery-office-number INTEGER ::= 11
-
-PhysicalDeliveryOfficeNumber ::= PDSParameter
-
-extension-OR-address-components INTEGER ::= 12
-
-ExtensionORAddressComponents ::= PDSParameter
-
-physical-delivery-personal-name INTEGER ::= 13
-
-PhysicalDeliveryPersonalName ::= PDSParameter
-
-physical-delivery-organization-name INTEGER ::= 14
-
-PhysicalDeliveryOrganizationName ::= PDSParameter
-
-extension-physical-delivery-address-components INTEGER ::= 15
-
-ExtensionPhysicalDeliveryAddressComponents ::= PDSParameter
-
-unformatted-postal-address INTEGER ::= 16
-
-UnformattedPostalAddress ::= SET {
- printable-address SEQUENCE SIZE (1..ub-pds-physical-address-lines)
- OF PrintableString (SIZE (1..ub-pds-parameter-length)) OPTIONAL,
- teletex-string TeletexString
- (SIZE (1..ub-unformatted-address-length)) OPTIONAL }
-
-street-address INTEGER ::= 17
-
-StreetAddress ::= PDSParameter
-
-post-office-box-address INTEGER ::= 18
-
-PostOfficeBoxAddress ::= PDSParameter
-
-poste-restante-address INTEGER ::= 19
-
-PosteRestanteAddress ::= PDSParameter
-
-unique-postal-name INTEGER ::= 20
-
-UniquePostalName ::= PDSParameter
-
-local-postal-attributes INTEGER ::= 21
-
-
-
-
-Cooper, et al. Standards Track [Page 122]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
-LocalPostalAttributes ::= PDSParameter
-
-PDSParameter ::= SET {
- printable-string PrintableString
- (SIZE(1..ub-pds-parameter-length)) OPTIONAL,
- teletex-string TeletexString
- (SIZE(1..ub-pds-parameter-length)) OPTIONAL }
-
-extended-network-address INTEGER ::= 22
-
-ExtendedNetworkAddress ::= CHOICE {
- e163-4-address SEQUENCE {
- number [0] IMPLICIT NumericString
- (SIZE (1..ub-e163-4-number-length)),
- sub-address [1] IMPLICIT NumericString
- (SIZE (1..ub-e163-4-sub-address-length))
- OPTIONAL },
- psap-address [0] IMPLICIT PresentationAddress }
-
-PresentationAddress ::= SEQUENCE {
- pSelector [0] EXPLICIT OCTET STRING OPTIONAL,
- sSelector [1] EXPLICIT OCTET STRING OPTIONAL,
- tSelector [2] EXPLICIT OCTET STRING OPTIONAL,
- nAddresses [3] EXPLICIT SET SIZE (1..MAX) OF OCTET STRING }
-
-terminal-type INTEGER ::= 23
-
-TerminalType ::= INTEGER {
- telex (3),
- teletex (4),
- g3-facsimile (5),
- g4-facsimile (6),
- ia5-terminal (7),
- videotex (8) } (0..ub-integer-options)
-
--- Extension Domain-defined Attributes
-
-teletex-domain-defined-attributes INTEGER ::= 6
-
-TeletexDomainDefinedAttributes ::= SEQUENCE SIZE
- (1..ub-domain-defined-attributes) OF TeletexDomainDefinedAttribute
-
-TeletexDomainDefinedAttribute ::= SEQUENCE {
- type TeletexString
- (SIZE (1..ub-domain-defined-attribute-type-length)),
- value TeletexString
- (SIZE (1..ub-domain-defined-attribute-value-length)) }
-
-
-
-
-Cooper, et al. Standards Track [Page 123]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
--- specifications of Upper Bounds MUST be regarded as mandatory
--- from Annex B of ITU-T X.411 Reference Definition of MTS Parameter
--- Upper Bounds
-
--- Upper Bounds
-ub-name INTEGER ::= 32768
-ub-common-name INTEGER ::= 64
-ub-locality-name INTEGER ::= 128
-ub-state-name INTEGER ::= 128
-ub-organization-name INTEGER ::= 64
-ub-organizational-unit-name INTEGER ::= 64
-ub-title INTEGER ::= 64
-ub-serial-number INTEGER ::= 64
-ub-match INTEGER ::= 128
-ub-emailaddress-length INTEGER ::= 255
-ub-common-name-length INTEGER ::= 64
-ub-country-name-alpha-length INTEGER ::= 2
-ub-country-name-numeric-length INTEGER ::= 3
-ub-domain-defined-attributes INTEGER ::= 4
-ub-domain-defined-attribute-type-length INTEGER ::= 8
-ub-domain-defined-attribute-value-length INTEGER ::= 128
-ub-domain-name-length INTEGER ::= 16
-ub-extension-attributes INTEGER ::= 256
-ub-e163-4-number-length INTEGER ::= 15
-ub-e163-4-sub-address-length INTEGER ::= 40
-ub-generation-qualifier-length INTEGER ::= 3
-ub-given-name-length INTEGER ::= 16
-ub-initials-length INTEGER ::= 5
-ub-integer-options INTEGER ::= 256
-ub-numeric-user-id-length INTEGER ::= 32
-ub-organization-name-length INTEGER ::= 64
-ub-organizational-unit-name-length INTEGER ::= 32
-ub-organizational-units INTEGER ::= 4
-ub-pds-name-length INTEGER ::= 16
-ub-pds-parameter-length INTEGER ::= 30
-ub-pds-physical-address-lines INTEGER ::= 6
-ub-postal-code-length INTEGER ::= 16
-ub-pseudonym INTEGER ::= 128
-ub-surname-length INTEGER ::= 40
-ub-terminal-id-length INTEGER ::= 24
-ub-unformatted-address-length INTEGER ::= 180
-ub-x121-address-length INTEGER ::= 16
-
--- Note - upper bounds on string types, such as TeletexString, are
--- measured in characters. Excepting PrintableString or IA5String, a
--- significantly greater number of octets will be required to hold
--- such a value. As a minimum, 16 octets, or twice the specified
--- upper bound, whichever is the larger, should be allowed for
-
-
-
-Cooper, et al. Standards Track [Page 124]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
--- TeletexString. For UTF8String or UniversalString at least four
--- times the upper bound should be allowed.
-
-END
-
-A.2. Implicitly Tagged Module, 1988 Syntax
-
-PKIX1Implicit88 { iso(1) identified-organization(3) dod(6) internet(1)
- security(5) mechanisms(5) pkix(7) id-mod(0) id-pkix1-implicit(19) }
-
-DEFINITIONS IMPLICIT TAGS ::=
-
-BEGIN
-
--- EXPORTS ALL --
-
-IMPORTS
- id-pe, id-kp, id-qt-unotice, id-qt-cps,
- -- delete following line if "new" types are supported --
- BMPString, UTF8String, -- end "new" types --
- ORAddress, Name, RelativeDistinguishedName,
- CertificateSerialNumber, Attribute, DirectoryString
- FROM PKIX1Explicit88 { iso(1) identified-organization(3)
- dod(6) internet(1) security(5) mechanisms(5) pkix(7)
- id-mod(0) id-pkix1-explicit(18) };
-
--- ISO arc for standard certificate and CRL extensions
-
-id-ce OBJECT IDENTIFIER ::= {joint-iso-ccitt(2) ds(5) 29}
-
--- authority key identifier OID and syntax
-
-id-ce-authorityKeyIdentifier OBJECT IDENTIFIER ::= { id-ce 35 }
-
-AuthorityKeyIdentifier ::= SEQUENCE {
- keyIdentifier [0] KeyIdentifier OPTIONAL,
- authorityCertIssuer [1] GeneralNames OPTIONAL,
- authorityCertSerialNumber [2] CertificateSerialNumber OPTIONAL }
- -- authorityCertIssuer and authorityCertSerialNumber MUST both
- -- be present or both be absent
-
-KeyIdentifier ::= OCTET STRING
-
-
-
-
-
-
-
-
-
-Cooper, et al. Standards Track [Page 125]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
--- subject key identifier OID and syntax
-
-id-ce-subjectKeyIdentifier OBJECT IDENTIFIER ::= { id-ce 14 }
-
-SubjectKeyIdentifier ::= KeyIdentifier
-
--- key usage extension OID and syntax
-
-id-ce-keyUsage OBJECT IDENTIFIER ::= { id-ce 15 }
-
-KeyUsage ::= BIT STRING {
- digitalSignature (0),
- nonRepudiation (1), -- recent editions of X.509 have
- -- renamed this bit to contentCommitment
- keyEncipherment (2),
- dataEncipherment (3),
- keyAgreement (4),
- keyCertSign (5),
- cRLSign (6),
- encipherOnly (7),
- decipherOnly (8) }
-
--- private key usage period extension OID and syntax
-
-id-ce-privateKeyUsagePeriod OBJECT IDENTIFIER ::= { id-ce 16 }
-
-PrivateKeyUsagePeriod ::= SEQUENCE {
- notBefore [0] GeneralizedTime OPTIONAL,
- notAfter [1] GeneralizedTime OPTIONAL }
- -- either notBefore or notAfter MUST be present
-
--- certificate policies extension OID and syntax
-
-id-ce-certificatePolicies OBJECT IDENTIFIER ::= { id-ce 32 }
-
-anyPolicy OBJECT IDENTIFIER ::= { id-ce-certificatePolicies 0 }
-
-CertificatePolicies ::= SEQUENCE SIZE (1..MAX) OF PolicyInformation
-
-PolicyInformation ::= SEQUENCE {
- policyIdentifier CertPolicyId,
- policyQualifiers SEQUENCE SIZE (1..MAX) OF
- PolicyQualifierInfo OPTIONAL }
-
-CertPolicyId ::= OBJECT IDENTIFIER
-
-
-
-
-
-
-Cooper, et al. Standards Track [Page 126]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
-PolicyQualifierInfo ::= SEQUENCE {
- policyQualifierId PolicyQualifierId,
- qualifier ANY DEFINED BY policyQualifierId }
-
--- Implementations that recognize additional policy qualifiers MUST
--- augment the following definition for PolicyQualifierId
-
-PolicyQualifierId ::= OBJECT IDENTIFIER ( id-qt-cps | id-qt-unotice )
-
--- CPS pointer qualifier
-
-CPSuri ::= IA5String
-
--- user notice qualifier
-
-UserNotice ::= SEQUENCE {
- noticeRef NoticeReference OPTIONAL,
- explicitText DisplayText OPTIONAL }
-
-NoticeReference ::= SEQUENCE {
- organization DisplayText,
- noticeNumbers SEQUENCE OF INTEGER }
-
-DisplayText ::= CHOICE {
- ia5String IA5String (SIZE (1..200)),
- visibleString VisibleString (SIZE (1..200)),
- bmpString BMPString (SIZE (1..200)),
- utf8String UTF8String (SIZE (1..200)) }
-
--- policy mapping extension OID and syntax
-
-id-ce-policyMappings OBJECT IDENTIFIER ::= { id-ce 33 }
-
-PolicyMappings ::= SEQUENCE SIZE (1..MAX) OF SEQUENCE {
- issuerDomainPolicy CertPolicyId,
- subjectDomainPolicy CertPolicyId }
-
--- subject alternative name extension OID and syntax
-
-id-ce-subjectAltName OBJECT IDENTIFIER ::= { id-ce 17 }
-
-SubjectAltName ::= GeneralNames
-
-GeneralNames ::= SEQUENCE SIZE (1..MAX) OF GeneralName
-
-
-
-
-
-
-
-Cooper, et al. Standards Track [Page 127]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
-GeneralName ::= CHOICE {
- otherName [0] AnotherName,
- rfc822Name [1] IA5String,
- dNSName [2] IA5String,
- x400Address [3] ORAddress,
- directoryName [4] Name,
- ediPartyName [5] EDIPartyName,
- uniformResourceIdentifier [6] IA5String,
- iPAddress [7] OCTET STRING,
- registeredID [8] OBJECT IDENTIFIER }
-
--- AnotherName replaces OTHER-NAME ::= TYPE-IDENTIFIER, as
--- TYPE-IDENTIFIER is not supported in the '88 ASN.1 syntax
-
-AnotherName ::= SEQUENCE {
- type-id OBJECT IDENTIFIER,
- value [0] EXPLICIT ANY DEFINED BY type-id }
-
-EDIPartyName ::= SEQUENCE {
- nameAssigner [0] DirectoryString OPTIONAL,
- partyName [1] DirectoryString }
-
--- issuer alternative name extension OID and syntax
-
-id-ce-issuerAltName OBJECT IDENTIFIER ::= { id-ce 18 }
-
-IssuerAltName ::= GeneralNames
-
-id-ce-subjectDirectoryAttributes OBJECT IDENTIFIER ::= { id-ce 9 }
-
-SubjectDirectoryAttributes ::= SEQUENCE SIZE (1..MAX) OF Attribute
-
--- basic constraints extension OID and syntax
-
-id-ce-basicConstraints OBJECT IDENTIFIER ::= { id-ce 19 }
-
-BasicConstraints ::= SEQUENCE {
- cA BOOLEAN DEFAULT FALSE,
- pathLenConstraint INTEGER (0..MAX) OPTIONAL }
-
-
-
-
-
-
-
-
-
-
-
-
-Cooper, et al. Standards Track [Page 128]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
--- name constraints extension OID and syntax
-
-id-ce-nameConstraints OBJECT IDENTIFIER ::= { id-ce 30 }
-
-NameConstraints ::= SEQUENCE {
- permittedSubtrees [0] GeneralSubtrees OPTIONAL,
- excludedSubtrees [1] GeneralSubtrees OPTIONAL }
-
-GeneralSubtrees ::= SEQUENCE SIZE (1..MAX) OF GeneralSubtree
-
-GeneralSubtree ::= SEQUENCE {
- base GeneralName,
- minimum [0] BaseDistance DEFAULT 0,
- maximum [1] BaseDistance OPTIONAL }
-
-BaseDistance ::= INTEGER (0..MAX)
-
--- policy constraints extension OID and syntax
-
-id-ce-policyConstraints OBJECT IDENTIFIER ::= { id-ce 36 }
-
-PolicyConstraints ::= SEQUENCE {
- requireExplicitPolicy [0] SkipCerts OPTIONAL,
- inhibitPolicyMapping [1] SkipCerts OPTIONAL }
-
-SkipCerts ::= INTEGER (0..MAX)
-
--- CRL distribution points extension OID and syntax
-
-id-ce-cRLDistributionPoints OBJECT IDENTIFIER ::= {id-ce 31}
-
-CRLDistributionPoints ::= SEQUENCE SIZE (1..MAX) OF DistributionPoint
-
-DistributionPoint ::= SEQUENCE {
- distributionPoint [0] DistributionPointName OPTIONAL,
- reasons [1] ReasonFlags OPTIONAL,
- cRLIssuer [2] GeneralNames OPTIONAL }
-
-DistributionPointName ::= CHOICE {
- fullName [0] GeneralNames,
- nameRelativeToCRLIssuer [1] RelativeDistinguishedName }
-
-
-
-
-
-
-
-
-
-
-Cooper, et al. Standards Track [Page 129]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
-ReasonFlags ::= BIT STRING {
- unused (0),
- keyCompromise (1),
- cACompromise (2),
- affiliationChanged (3),
- superseded (4),
- cessationOfOperation (5),
- certificateHold (6),
- privilegeWithdrawn (7),
- aACompromise (8) }
-
--- extended key usage extension OID and syntax
-
-id-ce-extKeyUsage OBJECT IDENTIFIER ::= {id-ce 37}
-
-ExtKeyUsageSyntax ::= SEQUENCE SIZE (1..MAX) OF KeyPurposeId
-
-KeyPurposeId ::= OBJECT IDENTIFIER
-
--- permit unspecified key uses
-
-anyExtendedKeyUsage OBJECT IDENTIFIER ::= { id-ce-extKeyUsage 0 }
-
--- extended key purpose OIDs
-
-id-kp-serverAuth OBJECT IDENTIFIER ::= { id-kp 1 }
-id-kp-clientAuth OBJECT IDENTIFIER ::= { id-kp 2 }
-id-kp-codeSigning OBJECT IDENTIFIER ::= { id-kp 3 }
-id-kp-emailProtection OBJECT IDENTIFIER ::= { id-kp 4 }
-id-kp-timeStamping OBJECT IDENTIFIER ::= { id-kp 8 }
-id-kp-OCSPSigning OBJECT IDENTIFIER ::= { id-kp 9 }
-
--- inhibit any policy OID and syntax
-
-id-ce-inhibitAnyPolicy OBJECT IDENTIFIER ::= { id-ce 54 }
-
-InhibitAnyPolicy ::= SkipCerts
-
--- freshest (delta)CRL extension OID and syntax
-
-id-ce-freshestCRL OBJECT IDENTIFIER ::= { id-ce 46 }
-
-FreshestCRL ::= CRLDistributionPoints
-
-
-
-
-
-
-
-
-Cooper, et al. Standards Track [Page 130]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
--- authority info access
-
-id-pe-authorityInfoAccess OBJECT IDENTIFIER ::= { id-pe 1 }
-
-AuthorityInfoAccessSyntax ::=
- SEQUENCE SIZE (1..MAX) OF AccessDescription
-
-AccessDescription ::= SEQUENCE {
- accessMethod OBJECT IDENTIFIER,
- accessLocation GeneralName }
-
--- subject info access
-
-id-pe-subjectInfoAccess OBJECT IDENTIFIER ::= { id-pe 11 }
-
-SubjectInfoAccessSyntax ::=
- SEQUENCE SIZE (1..MAX) OF AccessDescription
-
--- CRL number extension OID and syntax
-
-id-ce-cRLNumber OBJECT IDENTIFIER ::= { id-ce 20 }
-
-CRLNumber ::= INTEGER (0..MAX)
-
--- issuing distribution point extension OID and syntax
-
-id-ce-issuingDistributionPoint OBJECT IDENTIFIER ::= { id-ce 28 }
-
-IssuingDistributionPoint ::= SEQUENCE {
- distributionPoint [0] DistributionPointName OPTIONAL,
- onlyContainsUserCerts [1] BOOLEAN DEFAULT FALSE,
- onlyContainsCACerts [2] BOOLEAN DEFAULT FALSE,
- onlySomeReasons [3] ReasonFlags OPTIONAL,
- indirectCRL [4] BOOLEAN DEFAULT FALSE,
- onlyContainsAttributeCerts [5] BOOLEAN DEFAULT FALSE }
- -- at most one of onlyContainsUserCerts, onlyContainsCACerts,
- -- and onlyContainsAttributeCerts may be set to TRUE.
-
-id-ce-deltaCRLIndicator OBJECT IDENTIFIER ::= { id-ce 27 }
-
-BaseCRLNumber ::= CRLNumber
-
-
-
-
-
-
-
-
-
-
-Cooper, et al. Standards Track [Page 131]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
--- reason code extension OID and syntax
-
-id-ce-cRLReasons OBJECT IDENTIFIER ::= { id-ce 21 }
-
-CRLReason ::= ENUMERATED {
- unspecified (0),
- keyCompromise (1),
- cACompromise (2),
- affiliationChanged (3),
- superseded (4),
- cessationOfOperation (5),
- certificateHold (6),
- removeFromCRL (8),
- privilegeWithdrawn (9),
- aACompromise (10) }
-
--- certificate issuer CRL entry extension OID and syntax
-
-id-ce-certificateIssuer OBJECT IDENTIFIER ::= { id-ce 29 }
-
-CertificateIssuer ::= GeneralNames
-
--- hold instruction extension OID and syntax
-
-id-ce-holdInstructionCode OBJECT IDENTIFIER ::= { id-ce 23 }
-
-HoldInstructionCode ::= OBJECT IDENTIFIER
-
--- ANSI x9 arc holdinstruction arc
-
-holdInstruction OBJECT IDENTIFIER ::=
- {joint-iso-itu-t(2) member-body(2) us(840) x9cm(10040) 2}
-
--- ANSI X9 holdinstructions
-
-id-holdinstruction-none OBJECT IDENTIFIER ::=
- {holdInstruction 1} -- deprecated
-
-id-holdinstruction-callissuer OBJECT IDENTIFIER ::= {holdInstruction 2}
-
-id-holdinstruction-reject OBJECT IDENTIFIER ::= {holdInstruction 3}
-
-
-
-
-
-
-
-
-
-
-Cooper, et al. Standards Track [Page 132]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
--- invalidity date CRL entry extension OID and syntax
-
-id-ce-invalidityDate OBJECT IDENTIFIER ::= { id-ce 24 }
-
-InvalidityDate ::= GeneralizedTime
-
-END
-
-Appendix B. ASN.1 Notes
-
- CAs MUST force the serialNumber to be a non-negative integer, that
- is, the sign bit in the DER encoding of the INTEGER value MUST be
- zero. This can be done by adding a leading (leftmost) `00'H octet if
- necessary. This removes a potential ambiguity in mapping between a
- string of octets and an integer value.
-
- As noted in Section 4.1.2.2, serial numbers can be expected to
- contain long integers. Certificate users MUST be able to handle
- serialNumber values up to 20 octets in length. Conforming CAs MUST
- NOT use serialNumber values longer than 20 octets.
-
- As noted in Section 5.2.3, CRL numbers can be expected to contain
- long integers. CRL validators MUST be able to handle cRLNumber
- values up to 20 octets in length. Conforming CRL issuers MUST NOT
- use cRLNumber values longer than 20 octets.
-
- The construct "SEQUENCE SIZE (1..MAX) OF" appears in several ASN.1
- constructs. A valid ASN.1 sequence will have zero or more entries.
- The SIZE (1..MAX) construct constrains the sequence to have at least
- one entry. MAX indicates that the upper bound is unspecified.
- Implementations are free to choose an upper bound that suits their
- environment.
-
- The character string type PrintableString supports a very basic Latin
- character set: the lowercase letters 'a' through 'z', uppercase
- letters 'A' through 'Z', the digits '0' through '9', eleven special
- characters ' = ( ) + , - . / : ? and space.
-
- Implementers should note that the at sign ('@') and underscore ('_')
- characters are not supported by the ASN.1 type PrintableString.
- These characters often appear in Internet addresses. Such addresses
- MUST be encoded using an ASN.1 type that supports them. They are
- usually encoded as IA5String in either the emailAddress attribute
- within a distinguished name or the rfc822Name field of GeneralName.
- Conforming implementations MUST NOT encode strings that include
- either the at sign or underscore character as PrintableString.
-
-
-
-
-
-Cooper, et al. Standards Track [Page 133]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- The character string type TeletexString is a superset of
- PrintableString. TeletexString supports a fairly standard (ASCII-
- like) Latin character set: Latin characters with non-spacing accents
- and Japanese characters.
-
- Named bit lists are BIT STRINGs where the values have been assigned
- names. This specification makes use of named bit lists in the
- definitions for the key usage, CRL distribution points, and freshest
- CRL certificate extensions, as well as the freshest CRL and issuing
- distribution point CRL extensions. When DER encoding a named bit
- list, trailing zeros MUST be omitted. That is, the encoded value
- ends with the last named bit that is set to one.
-
- The character string type UniversalString supports any of the
- characters allowed by [ISO10646]. ISO 10646 is the Universal
- multiple-octet coded Character Set (UCS).
-
- The character string type UTF8String was introduced in the 1997
- version of ASN.1, and UTF8String was added to the list of choices for
- DirectoryString in the 2001 version of [X.520]. UTF8String is a
- universal type and has been assigned tag number 12. The content of
- UTF8String was defined by RFC 2044 and updated in RFC 2279, which was
- updated in [RFC3629].
-
- In anticipation of these changes, and in conformance with IETF Best
- Practices codified in [RFC2277], IETF Policy on Character Sets and
- Languages, this document includes UTF8String as a choice in
- DirectoryString and in the userNotice certificate policy qualifier.
-
- For many of the attribute types defined in [X.520], the
- AttributeValue uses the DirectoryString type. Of the attributes
- specified in Appendix A, the name, surname, givenName, initials,
- generationQualifier, commonName, localityName, stateOrProvinceName,
- organizationName, organizationalUnitName, title, and pseudonym
- attributes all use the DirectoryString type. X.520 uses a
- parameterized type definition [X.683] of DirectoryString to specify
- the syntax for each of these attributes. The parameter is used to
- indicate the maximum string length allowed for the attribute. In
- Appendix A, in order to avoid the use of parameterized type
- definitions, the DirectoryString type is written in its expanded form
- for the definition of each of these attribute types. So, the ASN.1
- in Appendix A describes the syntax for each of these attributes as
- being a CHOICE of TeletexString, PrintableString, UniversalString,
- UTF8String, and BMPString, with the appropriate constraints on the
- string length applied to each of the types in the CHOICE, rather than
- using the ASN.1 type DirectoryString to describe the syntax.
-
-
-
-
-
-Cooper, et al. Standards Track [Page 134]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- Implementers should note that the DER encoding of the SET OF values
- requires ordering of the encodings of the values. In particular,
- this issue arises with respect to distinguished names.
-
- Implementers should note that the DER encoding of SET or SEQUENCE
- components whose value is the DEFAULT omit the component from the
- encoded certificate or CRL. For example, a BasicConstraints
- extension whose cA value is FALSE would omit the cA boolean from the
- encoded certificate.
-
- Object Identifiers (OIDs) are used throughout this specification to
- identify certificate policies, public key and signature algorithms,
- certificate extensions, etc. There is no maximum size for OIDs.
- This specification mandates support for OIDs that have arc elements
- with values that are less than 2^28, that is, they MUST be between 0
- and 268,435,455, inclusive. This allows each arc element to be
- represented within a single 32-bit word. Implementations MUST also
- support OIDs where the length of the dotted decimal (see Section 1.4
- of [RFC4512]) string representation can be up to 100 bytes
- (inclusive). Implementations MUST be able to handle OIDs with up to
- 20 elements (inclusive). CAs SHOULD NOT issue certificates that
- contain OIDs that exceed these requirements. Likewise, CRL issuers
- SHOULD NOT issue CRLs that contain OIDs that exceed these
- requirements.
-
- The content-specific rules for encoding GeneralName field values in
- the nameConstraints extension differ from rules that apply in other
- extensions. In all other certificate, CRL, and CRL entry extensions
- specified in this document the encoding rules conform to the rules
- for the underlying type. For example, values in the
- uniformResourceIdentifier field must contain a valid URI as specified
- in [RFC3986]. The content-specific rules for encoding values in the
- nameConstraints extension are specified in Section 4.2.1.10, and
- these rules may not conform to the rules for the underlying type.
- For example, when the uniformResourceIdentifier field appears in a
- nameConstraints extension, it must hold a DNS name (e.g.,
- "host.example.com" or ".example.com") rather than a URI.
-
- Implementors are warned that the X.500 standards community has
- developed a series of extensibility rules. These rules determine
- when an ASN.1 definition can be changed without assigning a new
- Object Identifier (OID). For example, at least two extension
- definitions included in [RFC2459], the predecessor to this profile
- document, have different ASN.1 definitions in this specification, but
- the same OID is used. If unknown elements appear within an
- extension, and the extension is not marked as critical, those unknown
- elements ought to be ignored, as follows:
-
-
-
-
-Cooper, et al. Standards Track [Page 135]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- (a) ignore all unknown bit name assignments within a bit string;
-
- (b) ignore all unknown named numbers in an ENUMERATED type or
- INTEGER type that is being used in the enumerated style,
- provided the number occurs as an optional element of a SET or
- SEQUENCE; and
-
- (c) ignore all unknown elements in SETs, at the end of SEQUENCEs,
- or in CHOICEs where the CHOICE is itself an optional element
- of a SET or SEQUENCE.
-
- If an extension containing unexpected values is marked as critical,
- the implementation MUST reject the certificate or CRL containing the
- unrecognized extension.
-
-Appendix C. Examples
-
- This appendix contains four examples: three certificates and a CRL.
- The first two certificates and the CRL comprise a minimal
- certification path.
-
- Appendix C.1 contains an annotated hex dump of a "self-signed"
- certificate issued by a CA whose distinguished name is
- cn=Example CA,dc=example,dc=com. The certificate contains an RSA
- public key, and is signed by the corresponding RSA private key.
-
- Appendix C.2 contains an annotated hex dump of an end entity
- certificate. The end entity certificate contains an RSA public key,
- and is signed by the private key corresponding to the "self-signed"
- certificate in Appendix C.1.
-
- Appendix C.3 contains an annotated hex dump of an end entity
- certificate that contains a DSA public key with parameters, and is
- signed with DSA and SHA-1. This certificate is not part of the
- minimal certification path.
-
- Appendix C.4 contains an annotated hex dump of a CRL. The CRL is
- issued by the CA whose distinguished name is
- cn=Example CA,dc=example,dc=com and the list of revoked certificates
- includes the end entity certificate presented in Appendix C.2.
-
- The certificates were processed using Peter Gutmann's dumpasn1
- utility to generate the output. The source for the dumpasn1 utility
- is available at .
- The binaries for the certificates and CRLs are available at
- http://csrc.nist.gov/groups/ST/crypto_apps_infra/documents/pkixtools.
-
-
-
-
-
-Cooper, et al. Standards Track [Page 136]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- In places in this appendix where a distinguished name is specified
- using a string representation, the strings are formatted using the
- rules specified in [RFC4514].
-
-C.1. RSA Self-Signed Certificate
-
- This appendix contains an annotated hex dump of a 578 byte version 3
- certificate. The certificate contains the following information:
-
- (a) the serial number is 17;
- (b) the certificate is signed with RSA and the SHA-1 hash algorithm;
- (c) the issuer's distinguished name is
- cn=Example CA,dc=example,dc=com;
- (d) the subject's distinguished name is
- cn=Example CA,dc=example,dc=com;
- (e) the certificate was issued on April 30, 2004 and expired on
- April 30, 2005;
- (f) the certificate contains a 1024-bit RSA public key;
- (g) the certificate contains a subject key identifier extension
- generated using method (1) of Section 4.2.1.2; and
- (h) the certificate is a CA certificate (as indicated through the
- basic constraints extension).
-
- 0 574: SEQUENCE {
- 4 423: SEQUENCE {
- 8 3: [0] {
- 10 1: INTEGER 2
- : }
- 13 1: INTEGER 17
- 16 13: SEQUENCE {
- 18 9: OBJECT IDENTIFIER
- : sha1withRSAEncryption (1 2 840 113549 1 1 5)
- 29 0: NULL
- : }
- 31 67: SEQUENCE {
- 33 19: SET {
- 35 17: SEQUENCE {
- 37 10: OBJECT IDENTIFIER
- : domainComponent (0 9 2342 19200300 100 1 25)
- 49 3: IA5String 'com'
- : }
- : }
- 54 23: SET {
- 56 21: SEQUENCE {
- 58 10: OBJECT IDENTIFIER
- : domainComponent (0 9 2342 19200300 100 1 25)
- 70 7: IA5String 'example'
- : }
-
-
-
-Cooper, et al. Standards Track [Page 137]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- : }
- 79 19: SET {
- 81 17: SEQUENCE {
- 83 3: OBJECT IDENTIFIER commonName (2 5 4 3)
- 88 10: PrintableString 'Example CA'
- : }
- : }
- : }
- 100 30: SEQUENCE {
- 102 13: UTCTime 30/04/2004 14:25:34 GMT
- 117 13: UTCTime 30/04/2005 14:25:34 GMT
- : }
- 132 67: SEQUENCE {
- 134 19: SET {
- 136 17: SEQUENCE {
- 138 10: OBJECT IDENTIFIER
- : domainComponent (0 9 2342 19200300 100 1 25)
- 150 3: IA5String 'com'
- : }
- : }
- 155 23: SET {
- 157 21: SEQUENCE {
- 159 10: OBJECT IDENTIFIER
- : domainComponent (0 9 2342 19200300 100 1 25)
- 171 7: IA5String 'example'
- : }
- : }
- 180 19: SET {
- 182 17: SEQUENCE {
- 184 3: OBJECT IDENTIFIER commonName (2 5 4 3)
- 189 10: PrintableString 'Example CA'
- : }
- : }
- : }
- 201 159: SEQUENCE {
- 204 13: SEQUENCE {
- 206 9: OBJECT IDENTIFIER
- : rsaEncryption (1 2 840 113549 1 1 1)
- 217 0: NULL
- : }
- 219 141: BIT STRING, encapsulates {
- 223 137: SEQUENCE {
- 226 129: INTEGER
- : 00 C2 D7 97 6D 28 70 AA 5B CF 23 2E 80 70 39 EE
- : DB 6F D5 2D D5 6A 4F 7A 34 2D F9 22 72 47 70 1D
- : EF 80 E9 CA 30 8C 00 C4 9A 6E 5B 45 B4 6E A5 E6
- : 6C 94 0D FA 91 E9 40 FC 25 9D C7 B7 68 19 56 8F
- : 11 70 6A D7 F1 C9 11 4F 3A 7E 3F 99 8D 6E 76 A5
-
-
-
-Cooper, et al. Standards Track [Page 138]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- : 74 5F 5E A4 55 53 E5 C7 68 36 53 C7 1D 3B 12 A6
- : 85 FE BD 6E A1 CA DF 35 50 AC 08 D7 B9 B4 7E 5C
- : FE E2 A3 2C D1 23 84 AA 98 C0 9B 66 18 9A 68 47
- : E9
- 358 3: INTEGER 65537
- : }
- : }
- : }
- 363 66: [3] {
- 365 64: SEQUENCE {
- 367 29: SEQUENCE {
- 369 3: OBJECT IDENTIFIER subjectKeyIdentifier (2 5 29 14)
- 374 22: OCTET STRING, encapsulates {
- 376 20: OCTET STRING
- : 08 68 AF 85 33 C8 39 4A 7A F8 82 93 8E 70 6A 4A
- : 20 84 2C 32
- : }
- : }
- 398 14: SEQUENCE {
- 400 3: OBJECT IDENTIFIER keyUsage (2 5 29 15)
- 405 1: BOOLEAN TRUE
- 408 4: OCTET STRING, encapsulates {
- 410 2: BIT STRING 1 unused bits
- : '0000011'B
- : }
- : }
- 414 15: SEQUENCE {
- 416 3: OBJECT IDENTIFIER basicConstraints (2 5 29 19)
- 421 1: BOOLEAN TRUE
- 424 5: OCTET STRING, encapsulates {
- 426 3: SEQUENCE {
- 428 1: BOOLEAN TRUE
- : }
- : }
- : }
- : }
- : }
- : }
- 431 13: SEQUENCE {
- 433 9: OBJECT IDENTIFIER
- : sha1withRSAEncryption (1 2 840 113549 1 1 5)
- 444 0: NULL
- : }
- 446 129: BIT STRING
- : 6C F8 02 74 A6 61 E2 64 04 A6 54 0C 6C 72 13 AD
- : 3C 47 FB F6 65 13 A9 85 90 33 EA 76 A3 26 D9 FC
- : D1 0E 15 5F 28 B7 EF 93 BF 3C F3 E2 3E 7C B9 52
- : FC 16 6E 29 AA E1 F4 7A 6F D5 7F EF B3 95 CA F3
-
-
-
-Cooper, et al. Standards Track [Page 139]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- : 66 88 83 4E A1 35 45 84 CB BC 9B B8 C8 AD C5 5E
- : 46 D9 0B 0E 8D 80 E1 33 2B DC BE 2B 92 7E 4A 43
- : A9 6A EF 8A 63 61 B3 6E 47 38 BE E8 0D A3 67 5D
- : F3 FA 91 81 3C 92 BB C5 5F 25 25 EB 7C E7 D8 A1
- : }
-
-C.2. End Entity Certificate Using RSA
-
- This appendix contains an annotated hex dump of a 629-byte version 3
- certificate. The certificate contains the following information:
-
- (a) the serial number is 18;
- (b) the certificate is signed with RSA and the SHA-1 hash algorithm;
- (c) the issuer's distinguished name is
- cn=Example CA,dc=example,dc=com;
- (d) the subject's distinguished name is
- cn=End Entity,dc=example,dc=com;
- (e) the certificate was valid from September 15, 2004 through March
- 15, 2005;
- (f) the certificate contains a 1024-bit RSA public key;
- (g) the certificate is an end entity certificate, as the basic
- constraints extension is not present;
- (h) the certificate contains an authority key identifier extension
- matching the subject key identifier of the certificate in
- appendix C.1; and
- (i) the certificate includes one alternative name -- an electronic
- mail address (rfc822Name) of "end.entity@example.com".
-
- 0 625: SEQUENCE {
- 4 474: SEQUENCE {
- 8 3: [0] {
- 10 1: INTEGER 2
- : }
- 13 1: INTEGER 18
- 16 13: SEQUENCE {
- 18 9: OBJECT IDENTIFIER
- : sha1withRSAEncryption (1 2 840 113549 1 1 5)
- 29 0: NULL
- : }
- 31 67: SEQUENCE {
- 33 19: SET {
- 35 17: SEQUENCE {
- 37 10: OBJECT IDENTIFIER
- : domainComponent (0 9 2342 19200300 100 1 25)
- 49 3: IA5String 'com'
- : }
- : }
- 54 23: SET {
-
-
-
-Cooper, et al. Standards Track [Page 140]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- 56 21: SEQUENCE {
- 58 10: OBJECT IDENTIFIER
- : domainComponent (0 9 2342 19200300 100 1 25)
- 70 7: IA5String 'example'
- : }
- : }
- 79 19: SET {
- 81 17: SEQUENCE {
- 83 3: OBJECT IDENTIFIER commonName (2 5 4 3)
- 88 10: PrintableString 'Example CA'
- : }
- : }
- : }
- 100 30: SEQUENCE {
- 102 13: UTCTime 15/09/2004 11:48:21 GMT
- 117 13: UTCTime 15/03/2005 11:48:21 GMT
- : }
- 132 67: SEQUENCE {
- 134 19: SET {
- 136 17: SEQUENCE {
- 138 10: OBJECT IDENTIFIER
- : domainComponent (0 9 2342 19200300 100 1 25)
- 150 3: IA5String 'com'
- : }
- : }
- 155 23: SET {
- 157 21: SEQUENCE {
- 159 10: OBJECT IDENTIFIER
- : domainComponent (0 9 2342 19200300 100 1 25)
- 171 7: IA5String 'example'
- : }
- : }
- 180 19: SET {
- 182 17: SEQUENCE {
- 184 3: OBJECT IDENTIFIER commonName (2 5 4 3)
- 189 10: PrintableString 'End Entity'
- : }
- : }
- : }
- 201 159: SEQUENCE {
- 204 13: SEQUENCE {
- 206 9: OBJECT IDENTIFIER
- : rsaEncryption (1 2 840 113549 1 1 1)
- 217 0: NULL
- : }
- 219 141: BIT STRING, encapsulates {
- 223 137: SEQUENCE {
- 226 129: INTEGER
-
-
-
-Cooper, et al. Standards Track [Page 141]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- : 00 E1 6A E4 03 30 97 02 3C F4 10 F3 B5 1E 4D 7F
- : 14 7B F6 F5 D0 78 E9 A4 8A F0 A3 75 EC ED B6 56
- : 96 7F 88 99 85 9A F2 3E 68 77 87 EB 9E D1 9F C0
- : B4 17 DC AB 89 23 A4 1D 7E 16 23 4C 4F A8 4D F5
- : 31 B8 7C AA E3 1A 49 09 F4 4B 26 DB 27 67 30 82
- : 12 01 4A E9 1A B6 C1 0C 53 8B 6C FC 2F 7A 43 EC
- : 33 36 7E 32 B2 7B D5 AA CF 01 14 C6 12 EC 13 F2
- : 2D 14 7A 8B 21 58 14 13 4C 46 A3 9A F2 16 95 FF
- : 23
- 358 3: INTEGER 65537
- : }
- : }
- : }
- 363 117: [3] {
- 365 115: SEQUENCE {
- 367 33: SEQUENCE {
- 369 3: OBJECT IDENTIFIER subjectAltName (2 5 29 17)
- 374 26: OCTET STRING, encapsulates {
- 376 24: SEQUENCE {
- 378 22: [1] 'end.entity@example.com'
- : }
- : }
- : }
- 402 29: SEQUENCE {
- 404 3: OBJECT IDENTIFIER subjectKeyIdentifier (2 5 29 14)
- 409 22: OCTET STRING, encapsulates {
- 411 20: OCTET STRING
- : 17 7B 92 30 FF 44 D6 66 E1 90 10 22 6C 16 4F C0
- : 8E 41 DD 6D
- : }
- : }
- 433 31: SEQUENCE {
- 435 3: OBJECT IDENTIFIER
- : authorityKeyIdentifier (2 5 29 35)
- 440 24: OCTET STRING, encapsulates {
- 442 22: SEQUENCE {
- 444 20: [0]
- : 08 68 AF 85 33 C8 39 4A 7A F8 82 93 8E 70 6A
- : 4A 20 84 2C 32
- : }
- : }
- : }
- 466 14: SEQUENCE {
- 468 3: OBJECT IDENTIFIER keyUsage (2 5 29 15)
- 473 1: BOOLEAN TRUE
- 476 4: OCTET STRING, encapsulates {
- 478 2: BIT STRING 6 unused bits
- : '11'B
-
-
-
-Cooper, et al. Standards Track [Page 142]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- : }
- : }
- : }
- : }
- : }
- 482 13: SEQUENCE {
- 484 9: OBJECT IDENTIFIER
- : sha1withRSAEncryption (1 2 840 113549 1 1 5)
- 495 0: NULL
- : }
- 497 129: BIT STRING
- : 00 20 28 34 5B 68 32 01 BB 0A 36 0E AD 71 C5 95
- : 1A E1 04 CF AE AD C7 62 14 A4 1B 36 31 C0 E2 0C
- : 3D D9 1E C0 00 DC 10 A0 BA 85 6F 41 CB 62 7A B7
- : 4C 63 81 26 5E D2 80 45 5E 33 E7 70 45 3B 39 3B
- : 26 4A 9C 3B F2 26 36 69 08 79 BB FB 96 43 77 4B
- : 61 8B A1 AB 91 64 E0 F3 37 61 3C 1A A3 A4 C9 8A
- : B2 BF 73 D4 4D E4 58 E4 62 EA BC 20 74 92 86 0E
- : CE 84 60 76 E9 73 BB C7 85 D3 91 45 EA 62 5D CD
- : }
-
-C.3. End Entity Certificate Using DSA
-
- This appendix contains an annotated hex dump of a 914-byte version 3
- certificate. The certificate contains the following information:
-
- (a) the serial number is 256;
-
- (b) the certificate is signed with DSA and the SHA-1 hash algorithm;
-
- (c) the issuer's distinguished name is cn=Example DSA
- CA,dc=example,dc=com;
-
- (d) the subject's distinguished name is cn=DSA End
- Entity,dc=example,dc=com;
-
- (e) the certificate was issued on May 2, 2004 and expired on May 2,
- 2005;
-
- (f) the certificate contains a 1024-bit DSA public key with
- parameters;
-
- (g) the certificate is an end entity certificate (not a CA
- certificate);
-
- (h) the certificate includes a subject alternative name of
- "" and an issuer
- alternative name of "" -- both are URLs;
-
-
-
-Cooper, et al. Standards Track [Page 143]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- (i) the certificate includes an authority key identifier extension
- and a certificate policies extension specifying the policy OID
- 2.16.840.1.101.3.2.1.48.9; and
-
- (j) the certificate includes a critical key usage extension
- specifying that the public key is intended for verification of
- digital signatures.
-
- 0 910: SEQUENCE {
- 4 846: SEQUENCE {
- 8 3: [0] {
- 10 1: INTEGER 2
- : }
- 13 2: INTEGER 256
- 17 9: SEQUENCE {
- 19 7: OBJECT IDENTIFIER dsaWithSha1 (1 2 840 10040 4 3)
- : }
- 28 71: SEQUENCE {
- 30 19: SET {
- 32 17: SEQUENCE {
- 34 10: OBJECT IDENTIFIER
- : domainComponent (0 9 2342 19200300 100 1 25)
- 46 3: IA5String 'com'
- : }
- : }
- 51 23: SET {
- 53 21: SEQUENCE {
- 55 10: OBJECT IDENTIFIER
- : domainComponent (0 9 2342 19200300 100 1 25)
- 67 7: IA5String 'example'
- : }
- : }
- 76 23: SET {
- 78 21: SEQUENCE {
- 80 3: OBJECT IDENTIFIER commonName (2 5 4 3)
- 85 14: PrintableString 'Example DSA CA'
- : }
- : }
- : }
- 101 30: SEQUENCE {
- 103 13: UTCTime 02/05/2004 16:47:38 GMT
- 118 13: UTCTime 02/05/2005 16:47:38 GMT
- : }
- 133 71: SEQUENCE {
- 135 19: SET {
- 137 17: SEQUENCE {
- 139 10: OBJECT IDENTIFIER
- : domainComponent (0 9 2342 19200300 100 1 25)
-
-
-
-Cooper, et al. Standards Track [Page 144]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- 151 3: IA5String 'com'
- : }
- : }
- 156 23: SET {
- 158 21: SEQUENCE {
- 160 10: OBJECT IDENTIFIER
- : domainComponent (0 9 2342 19200300 100 1 25)
- 172 7: IA5String 'example'
- : }
- : }
- 181 23: SET {
- 183 21: SEQUENCE {
- 185 3: OBJECT IDENTIFIER commonName (2 5 4 3)
- 190 14: PrintableString 'DSA End Entity'
- : }
- : }
- : }
- 206 439: SEQUENCE {
- 210 300: SEQUENCE {
- 214 7: OBJECT IDENTIFIER dsa (1 2 840 10040 4 1)
- 223 287: SEQUENCE {
- 227 129: INTEGER
- : 00 B6 8B 0F 94 2B 9A CE A5 25 C6 F2 ED FC FB 95
- : 32 AC 01 12 33 B9 E0 1C AD 90 9B BC 48 54 9E F3
- : 94 77 3C 2C 71 35 55 E6 FE 4F 22 CB D5 D8 3E 89
- : 93 33 4D FC BD 4F 41 64 3E A2 98 70 EC 31 B4 50
- : DE EB F1 98 28 0A C9 3E 44 B3 FD 22 97 96 83 D0
- : 18 A3 E3 BD 35 5B FF EE A3 21 72 6A 7B 96 DA B9
- : 3F 1E 5A 90 AF 24 D6 20 F0 0D 21 A7 D4 02 B9 1A
- : FC AC 21 FB 9E 94 9E 4B 42 45 9E 6A B2 48 63 FE
- : 43
- 359 21: INTEGER
- : 00 B2 0D B0 B1 01 DF 0C 66 24 FC 13 92 BA 55 F7
- : 7D 57 74 81 E5
- 382 129: INTEGER
- : 00 9A BF 46 B1 F5 3F 44 3D C9 A5 65 FB 91 C0 8E
- : 47 F1 0A C3 01 47 C2 44 42 36 A9 92 81 DE 57 C5
- : E0 68 86 58 00 7B 1F F9 9B 77 A1 C5 10 A5 80 91
- : 78 51 51 3C F6 FC FC CC 46 C6 81 78 92 84 3D F4
- : 93 3D 0C 38 7E 1A 5B 99 4E AB 14 64 F6 0C 21 22
- : 4E 28 08 9C 92 B9 66 9F 40 E8 95 F6 D5 31 2A EF
- : 39 A2 62 C7 B2 6D 9E 58 C4 3A A8 11 81 84 6D AF
- : F8 B4 19 B4 C2 11 AE D0 22 3B AA 20 7F EE 1E 57
- : 18
- : }
- : }
- 514 132: BIT STRING, encapsulates {
- 518 128: INTEGER
-
-
-
-Cooper, et al. Standards Track [Page 145]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- : 30 B6 75 F7 7C 20 31 AE 38 BB 7E 0D 2B AB A0 9C
- : 4B DF 20 D5 24 13 3C CD 98 E5 5F 6C B7 C1 BA 4A
- : BA A9 95 80 53 F0 0D 72 DC 33 37 F4 01 0B F5 04
- : 1F 9D 2E 1F 62 D8 84 3A 9B 25 09 5A 2D C8 46 8E
- : 2B D4 F5 0D 3B C7 2D C6 6C B9 98 C1 25 3A 44 4E
- : 8E CA 95 61 35 7C CE 15 31 5C 23 13 1E A2 05 D1
- : 7A 24 1C CB D3 72 09 90 FF 9B 9D 28 C0 A1 0A EC
- : 46 9F 0D B8 D0 DC D0 18 A6 2B 5E F9 8F B5 95 BE
- : }
- : }
- 649 202: [3] {
- 652 199: SEQUENCE {
- 655 57: SEQUENCE {
- 657 3: OBJECT IDENTIFIER subjectAltName (2 5 29 17)
- 662 50: OCTET STRING, encapsulates {
- 664 48: SEQUENCE {
- 666 46: [6]
- : 'http://www.example.com/users/DSAendentity.'
- : 'html'
- : }
- : }
- : }
- 714 33: SEQUENCE {
- 716 3: OBJECT IDENTIFIER issuerAltName (2 5 29 18)
- 721 26: OCTET STRING, encapsulates {
- 723 24: SEQUENCE {
- 725 22: [6] 'http://www.example.com'
- : }
- : }
- : }
- 749 29: SEQUENCE {
- 751 3: OBJECT IDENTIFIER subjectKeyIdentifier (2 5 29 14)
- 756 22: OCTET STRING, encapsulates {
- 758 20: OCTET STRING
- : DD 25 66 96 43 AB 78 11 43 44 FE 95 16 F9 D9 B6
- : B7 02 66 8D
- : }
- : }
- 780 31: SEQUENCE {
- 782 3: OBJECT IDENTIFIER
- : authorityKeyIdentifier (2 5 29 35)
- 787 24: OCTET STRING, encapsulates {
- 789 22: SEQUENCE {
- 791 20: [0]
- : 86 CA A5 22 81 62 EF AD 0A 89 BC AD 72 41 2C
- : 29 49 F4 86 56
- : }
- : }
-
-
-
-Cooper, et al. Standards Track [Page 146]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- : }
- 813 23: SEQUENCE {
- 815 3: OBJECT IDENTIFIER certificatePolicies (2 5 29 32)
- 820 16: OCTET STRING, encapsulates {
- 822 14: SEQUENCE {
- 824 12: SEQUENCE {
- 826 10: OBJECT IDENTIFIER '2 16 840 1 101 3 2 1 48 9'
- : }
- : }
- : }
- : }
- 838 14: SEQUENCE {
- 840 3: OBJECT IDENTIFIER keyUsage (2 5 29 15)
- 845 1: BOOLEAN TRUE
- 848 4: OCTET STRING, encapsulates {
- 850 2: BIT STRING 7 unused bits
- : '1'B (bit 0)
- : }
- : }
- : }
- : }
- : }
- 854 9: SEQUENCE {
- 856 7: OBJECT IDENTIFIER dsaWithSha1 (1 2 840 10040 4 3)
- : }
- 865 47: BIT STRING, encapsulates {
- 868 44: SEQUENCE {
- 870 20: INTEGER
- : 65 57 07 34 DD DC CA CC 5E F4 02 F4 56 42 2C 5E
- : E1 B3 3B 80
- 892 20: INTEGER
- : 60 F4 31 17 CA F4 CF FF EE F4 08 A7 D9 B2 61 BE
- : B1 C3 DA BF
- : }
- : }
- : }
-
-C.4. Certificate Revocation List
-
- This appendix contains an annotated hex dump of a version 2 CRL with
- two extensions (cRLNumber and authorityKeyIdentifier). The CRL was
- issued by cn=Example CA,dc=example,dc=com on February 5, 2005; the
- next scheduled issuance was February 6, 2005. The CRL includes one
- revoked certificate: serial number 18, which was revoked on November
- 19, 2004 due to keyCompromise. The CRL itself is number 12, and it
- was signed with RSA and SHA-1.
-
-
-
-
-
-Cooper, et al. Standards Track [Page 147]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- 0 352: SEQUENCE {
- 4 202: SEQUENCE {
- 7 1: INTEGER 1
- 10 13: SEQUENCE {
- 12 9: OBJECT IDENTIFIER
- : sha1withRSAEncryption (1 2 840 113549 1 1 5)
- 23 0: NULL
- : }
- 25 67: SEQUENCE {
- 27 19: SET {
- 29 17: SEQUENCE {
- 31 10: OBJECT IDENTIFIER
- : domainComponent (0 9 2342 19200300 100 1 25)
- 43 3: IA5String 'com'
- : }
- : }
- 48 23: SET {
- 50 21: SEQUENCE {
- 52 10: OBJECT IDENTIFIER
- : domainComponent (0 9 2342 19200300 100 1 25)
- 64 7: IA5String 'example'
- : }
- : }
- 73 19: SET {
- 75 17: SEQUENCE {
- 77 3: OBJECT IDENTIFIER commonName (2 5 4 3)
- 82 10: PrintableString 'Example CA'
- : }
- : }
- : }
- 94 13: UTCTime 05/02/2005 12:00:00 GMT
- 109 13: UTCTime 06/02/2005 12:00:00 GMT
- 124 34: SEQUENCE {
- 126 32: SEQUENCE {
- 128 1: INTEGER 18
- 131 13: UTCTime 19/11/2004 15:57:03 GMT
- 146 12: SEQUENCE {
- 148 10: SEQUENCE {
- 150 3: OBJECT IDENTIFIER cRLReason (2 5 29 21)
- 155 3: OCTET STRING, encapsulates {
- 157 1: ENUMERATED 1
- : }
- : }
- : }
- : }
- : }
- 160 47: [0] {
- 162 45: SEQUENCE {
-
-
-
-Cooper, et al. Standards Track [Page 148]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
- 164 31: SEQUENCE {
- 166 3: OBJECT IDENTIFIER
- : authorityKeyIdentifier (2 5 29 35)
- 171 24: OCTET STRING, encapsulates {
- 173 22: SEQUENCE {
- 175 20: [0]
- : 08 68 AF 85 33 C8 39 4A 7A F8 82 93 8E 70 6A
- : 4A 20 84 2C 32
- : }
- : }
- : }
- 197 10: SEQUENCE {
- 199 3: OBJECT IDENTIFIER cRLNumber (2 5 29 20)
- 204 3: OCTET STRING, encapsulates {
- 206 1: INTEGER 12
- : }
- : }
- : }
- : }
- : }
- 209 13: SEQUENCE {
- 211 9: OBJECT IDENTIFIER
- : sha1withRSAEncryption (1 2 840 113549 1 1 5)
- 222 0: NULL
- : }
- 224 129: BIT STRING
- : 22 DC 18 7D F7 08 CE CC 75 D0 D0 6A 9B AD 10 F4
- : 76 23 B4 81 6E B5 6D BE 0E FB 15 14 6C C8 17 6D
- : 1F EE 90 17 A2 6F 60 E4 BD AA 8C 55 DE 8E 84 6F
- : 92 F8 9F 10 12 27 AF 4A D4 2F 85 E2 36 44 7D AA
- : A3 4C 25 38 15 FF 00 FD 3E 7E EE 3D 26 12 EB D8
- : E7 2B 62 E2 2B C3 46 80 EF 78 82 D1 15 C6 D0 9C
- : 72 6A CB CE 7A ED 67 99 8B 6E 70 81 7D 43 42 74
- : C1 A6 AF C1 55 17 A2 33 4C D6 06 98 2B A4 FC 2E
- : }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Cooper, et al. Standards Track [Page 149]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
-Authors' Addresses
-
- David Cooper
- National Institute of Standards and Technology
- 100 Bureau Drive, Mail Stop 8930
- Gaithersburg, MD 20899-8930
- USA
- EMail: david.cooper@nist.gov
-
- Stefan Santesson
- Microsoft
- One Microsoft Way
- Redmond, WA 98052
- USA
- EMail: stefans@microsoft.com
-
- Stephen Farrell
- Distributed Systems Group
- Computer Science Department
- Trinity College Dublin
- Ireland
- EMail: stephen.farrell@cs.tcd.ie
-
- Sharon Boeyen
- Entrust
- 1000 Innovation Drive
- Ottawa, Ontario
- Canada K2K 3E7
- EMail: sharon.boeyen@entrust.com
-
- Russell Housley
- Vigil Security, LLC
- 918 Spring Knoll Drive
- Herndon, VA 20170
- USA
- EMail: housley@vigilsec.com
-
- Tim Polk
- National Institute of Standards and Technology
- 100 Bureau Drive, Mail Stop 8930
- Gaithersburg, MD 20899-8930
- USA
- EMail: wpolk@nist.gov
-
-
-
-
-
-
-
-
-Cooper, et al. Standards Track [Page 150]
-
-RFC 5280 PKIX Certificate and CRL Profile May 2008
-
-
-Full Copyright Statement
-
- Copyright (C) The IETF Trust (2008).
-
- This document is subject to the rights, licenses and restrictions
- contained in BCP 78, and except as set forth therein, the authors
- retain all their rights.
-
- This document and the information contained herein are provided on an
- "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
- OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST AND
- THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS
- OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF
- THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
- WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
-
-Intellectual Property
-
- The IETF takes no position regarding the validity or scope of any
- Intellectual Property Rights or other rights that might be claimed to
- pertain to the implementation or use of the technology described in
- this document or the extent to which any license under such rights
- might or might not be available; nor does it represent that it has
- made any independent effort to identify any such rights. Information
- on the procedures with respect to rights in RFC documents can be
- found in BCP 78 and BCP 79.
-
- Copies of IPR disclosures made to the IETF Secretariat and any
- assurances of licenses to be made available, or the result of an
- attempt made to obtain a general license or permission for the use of
- such proprietary rights by implementers or users of this
- specification can be obtained from the IETF on-line IPR repository at
- http://www.ietf.org/ipr.
-
- The IETF invites any interested party to bring to its attention any
- copyrights, patents or patent applications, or other proprietary
- rights that may cover technology that may be required to implement
- this standard. Please address the information to the IETF at
- ietf-ipr@ietf.org.
-
-
-
-
-
-
-
-
-
-
-
-
-Cooper, et al. Standards Track [Page 151]
-
diff --git a/specifications/auth/rfc6570.pdf b/specifications/auth/rfc6570.pdf
deleted file mode 100644
index 76def4cc..00000000
Binary files a/specifications/auth/rfc6570.pdf and /dev/null differ
diff --git a/specifications/auth/rfc6570.txt b/specifications/auth/rfc6570.txt
deleted file mode 100644
index 12d5c0f9..00000000
--- a/specifications/auth/rfc6570.txt
+++ /dev/null
@@ -1,1907 +0,0 @@
-
-
-
-
-
-
-Internet Engineering Task Force (IETF) J. Gregorio
-Request for Comments: 6570 Google
-Category: Standards Track R. Fielding
-ISSN: 2070-1721 Adobe
- M. Hadley
- MITRE
- M. Nottingham
- Rackspace
- D. Orchard
- Salesforce.com
- March 2012
-
-
- URI Template
-
-Abstract
-
- A URI Template is a compact sequence of characters for describing a
- range of Uniform Resource Identifiers through variable expansion.
- This specification defines the URI Template syntax and the process
- for expanding a URI Template into a URI reference, along with
- guidelines for the use of URI Templates on the Internet.
-
-Status of This Memo
-
- This is an Internet Standards Track document.
-
- This document is a product of the Internet Engineering Task Force
- (IETF). It represents the consensus of the IETF community. It has
- received public review and has been approved for publication by the
- Internet Engineering Steering Group (IESG). Further information on
- Internet Standards is available in Section 2 of RFC 5741.
-
- Information about the current status of this document, any errata,
- and how to provide feedback on it may be obtained at
- http://www.rfc-editor.org/info/rfc6570.
-
-Copyright Notice
-
- Copyright (c) 2012 IETF Trust and the persons identified as the
- document authors. All rights reserved.
-
- This document is subject to BCP 78 and the IETF Trust's Legal
- Provisions Relating to IETF Documents
- (http://trustee.ietf.org/license-info) in effect on the date of
- publication of this document. Please review these documents
- carefully, as they describe your rights and restrictions with respect
- to this document. Code Components extracted from this document must
-
-
-
-Gregorio, et al. Standards Track [Page 1]
-
-RFC 6570 URI Template March 2012
-
-
- include Simplified BSD License text as described in Section 4.e of
- the Trust Legal Provisions and are provided without warranty as
- described in the Simplified BSD License.
-
-Table of Contents
-
- 1. Introduction ....................................................3
- 1.1. Overview ...................................................3
- 1.2. Levels and Expression Types ................................5
- 1.3. Design Considerations ......................................9
- 1.4. Limitations ...............................................10
- 1.5. Notational Conventions ....................................11
- 1.6. Character Encoding and Unicode Normalization ..............12
- 2. Syntax .........................................................13
- 2.1. Literals ..................................................13
- 2.2. Expressions ...............................................13
- 2.3. Variables .................................................14
- 2.4. Value Modifiers ...........................................15
- 2.4.1. Prefix Values ......................................15
- 2.4.2. Composite Values ...................................16
- 3. Expansion ......................................................18
- 3.1. Literal Expansion .........................................18
- 3.2. Expression Expansion ......................................18
- 3.2.1. Variable Expansion .................................19
- 3.2.2. Simple String Expansion: {var} .....................21
- 3.2.3. Reserved Expansion: {+var} .........................22
- 3.2.4. Fragment Expansion: {#var} .........................23
- 3.2.5. Label Expansion with Dot-Prefix: {.var} ............24
- 3.2.6. Path Segment Expansion: {/var} .....................24
- 3.2.7. Path-Style Parameter Expansion: {;var} .............25
- 3.2.8. Form-Style Query Expansion: {?var} .................26
- 3.2.9. Form-Style Query Continuation: {&var} ..............27
- 4. Security Considerations ........................................27
- 5. Acknowledgments ................................................28
- 6. References .....................................................28
- 6.1. Normative References ......................................28
- 6.2. Informative References ....................................29
- Appendix A. Implementation Hints ..................................30
-
-
-
-
-
-
-
-
-
-
-
-
-
-Gregorio, et al. Standards Track [Page 2]
-
-RFC 6570 URI Template March 2012
-
-
-1. Introduction
-
-1.1. Overview
-
- A Uniform Resource Identifier (URI) [RFC3986] is often used to
- identify a specific resource within a common space of similar
- resources (informally, a "URI space"). For example, personal web
- spaces are often delegated using a common pattern, such as
-
- http://example.com/~fred/
- http://example.com/~mark/
-
- or a set of dictionary entries might be grouped in a hierarchy by the
- first letter of the term, as in
-
- http://example.com/dictionary/c/cat
- http://example.com/dictionary/d/dog
-
- or a service interface might be invoked with various user input in a
- common pattern, as in
-
- http://example.com/search?q=cat&lang=en
- http://example.com/search?q=chien&lang=fr
-
- A URI Template is a compact sequence of characters for describing a
- range of Uniform Resource Identifiers through variable expansion.
-
- URI Templates provide a mechanism for abstracting a space of resource
- identifiers such that the variable parts can be easily identified and
- described. URI Templates can have many uses, including the discovery
- of available services, configuring resource mappings, defining
- computed links, specifying interfaces, and other forms of
- programmatic interaction with resources. For example, the above
- resources could be described by the following URI Templates:
-
- http://example.com/~{username}/
- http://example.com/dictionary/{term:1}/{term}
- http://example.com/search{?q,lang}
-
- We define the following terms:
-
- expression: The text between '{' and '}', including the enclosing
- braces, as defined in Section 2.
-
- expansion: The string result obtained from a template expression
- after processing it according to its expression type, list of
- variable names, and value modifiers, as defined in Section 3.
-
-
-
-
-Gregorio, et al. Standards Track [Page 3]
-
-RFC 6570 URI Template March 2012
-
-
- template processor: A program or library that, given a URI Template
- and a set of variables with values, transforms the template string
- into a URI reference by parsing the template for expressions and
- substituting each one with its corresponding expansion.
-
- A URI Template provides both a structural description of a URI space
- and, when variable values are provided, machine-readable instructions
- on how to construct a URI corresponding to those values. A URI
- Template is transformed into a URI reference by replacing each
- delimited expression with its value as defined by the expression type
- and the values of variables named within the expression. The
- expression types range from simple string expansion to multiple
- name=value lists. The expansions are based on the URI generic
- syntax, allowing an implementation to process any URI Template
- without knowing the scheme-specific requirements of every possible
- resulting URI.
-
- For example, the following URI Template includes a form-style
- parameter expression, as indicated by the "?" operator appearing
- before the variable names.
-
- http://www.example.com/foo{?query,number}
-
- The expansion process for expressions beginning with the question-
- mark ("?") operator follows the same pattern as form-style interfaces
- on the World Wide Web:
-
- http://www.example.com/foo{?query,number}
- \_____________/
- |
- |
- For each defined variable in [ 'query', 'number' ],
- substitute "?" if it is the first substitution or "&"
- thereafter, followed by the variable name, '=', and the
- variable's value.
-
- If the variables have the values
-
- query := "mycelium"
- number := 100
-
- then the expansion of the above URI Template is
-
- http://www.example.com/foo?query=mycelium&number=100
-
- Alternatively, if 'query' is undefined, then the expansion would be
-
- http://www.example.com/foo?number=100
-
-
-
-Gregorio, et al. Standards Track [Page 4]
-
-RFC 6570 URI Template March 2012
-
-
- or if both variables are undefined, then it would be
-
- http://www.example.com/foo
-
- A URI Template may be provided in absolute form, as in the examples
- above, or in relative form. A template is expanded before the
- resulting reference is resolved from relative to absolute form.
-
- Although the URI syntax is used for the result, the template string
- is allowed to contain the broader set of characters that can be found
- in Internationalized Resource Identifier (IRI) references [RFC3987].
- Therefore, a URI Template is also an IRI template, and the result of
- template processing can be transformed to an IRI by following the
- process defined in Section 3.2 of [RFC3987].
-
-1.2. Levels and Expression Types
-
- URI Templates are similar to a macro language with a fixed set of
- macro definitions: the expression type determines the expansion
- process. The default expression type is simple string expansion,
- wherein a single named variable is replaced by its value as a string
- after pct-encoding any characters not in the set of unreserved URI
- characters (Section 1.5).
-
- Since most template processors implemented prior to this
- specification have only implemented the default expression type, we
- refer to these as Level 1 templates.
-
- .-----------------------------------------------------------------.
- | Level 1 examples, with variables having values of |
- | |
- | var := "value" |
- | hello := "Hello World!" |
- | |
- |-----------------------------------------------------------------|
- | Op Expression Expansion |
- |-----------------------------------------------------------------|
- | | Simple string expansion (Sec 3.2.2) |
- | | |
- | | {var} value |
- | | {hello} Hello%20World%21 |
- `-----------------------------------------------------------------'
-
- Level 2 templates add the plus ("+") operator, for expansion of
- values that are allowed to include reserved URI characters
- (Section 1.5), and the crosshatch ("#") operator for expansion of
- fragment identifiers.
-
-
-
-
-Gregorio, et al. Standards Track [Page 5]
-
-RFC 6570 URI Template March 2012
-
-
- .-----------------------------------------------------------------.
- | Level 2 examples, with variables having values of |
- | |
- | var := "value" |
- | hello := "Hello World!" |
- | path := "/foo/bar" |
- | |
- |-----------------------------------------------------------------|
- | Op Expression Expansion |
- |-----------------------------------------------------------------|
- | + | Reserved string expansion (Sec 3.2.3) |
- | | |
- | | {+var} value |
- | | {+hello} Hello%20World! |
- | | {+path}/here /foo/bar/here |
- | | here?ref={+path} here?ref=/foo/bar |
- |-----+-----------------------------------------------------------|
- | # | Fragment expansion, crosshatch-prefixed (Sec 3.2.4) |
- | | |
- | | X{#var} X#value |
- | | X{#hello} X#Hello%20World! |
- `-----------------------------------------------------------------'
-
- Level 3 templates allow multiple variables per expression, each
- separated by a comma, and add more complex operators for dot-prefixed
- labels, slash-prefixed path segments, semicolon-prefixed path
- parameters, and the form-style construction of a query syntax
- consisting of name=value pairs that are separated by an ampersand
- character.
-
- .-----------------------------------------------------------------.
- | Level 3 examples, with variables having values of |
- | |
- | var := "value" |
- | hello := "Hello World!" |
- | empty := "" |
- | path := "/foo/bar" |
- | x := "1024" |
- | y := "768" |
- | |
- |-----------------------------------------------------------------|
- | Op Expression Expansion |
- |-----------------------------------------------------------------|
- | | String expansion with multiple variables (Sec 3.2.2) |
- | | |
- | | map?{x,y} map?1024,768 |
- | | {x,hello,y} 1024,Hello%20World%21,768 |
- | | |
-
-
-
-Gregorio, et al. Standards Track [Page 6]
-
-RFC 6570 URI Template March 2012
-
-
- |-----+-----------------------------------------------------------|
- | + | Reserved expansion with multiple variables (Sec 3.2.3) |
- | | |
- | | {+x,hello,y} 1024,Hello%20World!,768 |
- | | {+path,x}/here /foo/bar,1024/here |
- | | |
- |-----+-----------------------------------------------------------|
- | # | Fragment expansion with multiple variables (Sec 3.2.4) |
- | | |
- | | {#x,hello,y} #1024,Hello%20World!,768 |
- | | {#path,x}/here #/foo/bar,1024/here |
- | | |
- |-----+-----------------------------------------------------------|
- | . | Label expansion, dot-prefixed (Sec 3.2.5) |
- | | |
- | | X{.var} X.value |
- | | X{.x,y} X.1024.768 |
- | | |
- |-----+-----------------------------------------------------------|
- | / | Path segments, slash-prefixed (Sec 3.2.6) |
- | | |
- | | {/var} /value |
- | | {/var,x}/here /value/1024/here |
- | | |
- |-----+-----------------------------------------------------------|
- | ; | Path-style parameters, semicolon-prefixed (Sec 3.2.7) |
- | | |
- | | {;x,y} ;x=1024;y=768 |
- | | {;x,y,empty} ;x=1024;y=768;empty |
- | | |
- |-----+-----------------------------------------------------------|
- | ? | Form-style query, ampersand-separated (Sec 3.2.8) |
- | | |
- | | {?x,y} ?x=1024&y=768 |
- | | {?x,y,empty} ?x=1024&y=768&empty= |
- | | |
- |-----+-----------------------------------------------------------|
- | & | Form-style query continuation (Sec 3.2.9) |
- | | |
- | | ?fixed=yes{&x} ?fixed=yes&x=1024 |
- | | {&x,y,empty} &x=1024&y=768&empty= |
- | | |
- `-----------------------------------------------------------------'
-
- Finally, Level 4 templates add value modifiers as an optional suffix
- to each variable name. A prefix modifier (":") indicates that only a
- limited number of characters from the beginning of the value are used
- by the expansion (Section 2.4.1). An explode ("*") modifier
-
-
-
-Gregorio, et al. Standards Track [Page 7]
-
-RFC 6570 URI Template March 2012
-
-
- indicates that the variable is to be treated as a composite value,
- consisting of either a list of names or an associative array of
- (name, value) pairs, that is expanded as if each member were a
- separate variable (Section 2.4.2).
-
- .-----------------------------------------------------------------.
- | Level 4 examples, with variables having values of |
- | |
- | var := "value" |
- | hello := "Hello World!" |
- | path := "/foo/bar" |
- | list := ("red", "green", "blue") |
- | keys := [("semi",";"),("dot","."),("comma",",")] |
- | |
- | Op Expression Expansion |
- |-----------------------------------------------------------------|
- | | String expansion with value modifiers (Sec 3.2.2) |
- | | |
- | | {var:3} val |
- | | {var:30} value |
- | | {list} red,green,blue |
- | | {list*} red,green,blue |
- | | {keys} semi,%3B,dot,.,comma,%2C |
- | | {keys*} semi=%3B,dot=.,comma=%2C |
- | | |
- |-----+-----------------------------------------------------------|
- | + | Reserved expansion with value modifiers (Sec 3.2.3) |
- | | |
- | | {+path:6}/here /foo/b/here |
- | | {+list} red,green,blue |
- | | {+list*} red,green,blue |
- | | {+keys} semi,;,dot,.,comma,, |
- | | {+keys*} semi=;,dot=.,comma=, |
- | | |
- |-----+-----------------------------------------------------------|
- | # | Fragment expansion with value modifiers (Sec 3.2.4) |
- | | |
- | | {#path:6}/here #/foo/b/here |
- | | {#list} #red,green,blue |
- | | {#list*} #red,green,blue |
- | | {#keys} #semi,;,dot,.,comma,, |
- | | {#keys*} #semi=;,dot=.,comma=, |
- | | |
- |-----+-----------------------------------------------------------|
- | . | Label expansion, dot-prefixed (Sec 3.2.5) |
- | | |
- | | X{.var:3} X.val |
- | | X{.list} X.red,green,blue |
-
-
-
-Gregorio, et al. Standards Track [Page 8]
-
-RFC 6570 URI Template March 2012
-
-
- | | X{.list*} X.red.green.blue |
- | | X{.keys} X.semi,%3B,dot,.,comma,%2C |
- | | X{.keys*} X.semi=%3B.dot=..comma=%2C |
- | | |
- |-----+-----------------------------------------------------------|
- | / | Path segments, slash-prefixed (Sec 3.2.6) |
- | | |
- | | {/var:1,var} /v/value |
- | | {/list} /red,green,blue |
- | | {/list*} /red/green/blue |
- | | {/list*,path:4} /red/green/blue/%2Ffoo |
- | | {/keys} /semi,%3B,dot,.,comma,%2C |
- | | {/keys*} /semi=%3B/dot=./comma=%2C |
- | | |
- |-----+-----------------------------------------------------------|
- | ; | Path-style parameters, semicolon-prefixed (Sec 3.2.7) |
- | | |
- | | {;hello:5} ;hello=Hello |
- | | {;list} ;list=red,green,blue |
- | | {;list*} ;list=red;list=green;list=blue |
- | | {;keys} ;keys=semi,%3B,dot,.,comma,%2C |
- | | {;keys*} ;semi=%3B;dot=.;comma=%2C |
- | | |
- |-----+-----------------------------------------------------------|
- | ? | Form-style query, ampersand-separated (Sec 3.2.8) |
- | | |
- | | {?var:3} ?var=val |
- | | {?list} ?list=red,green,blue |
- | | {?list*} ?list=red&list=green&list=blue |
- | | {?keys} ?keys=semi,%3B,dot,.,comma,%2C |
- | | {?keys*} ?semi=%3B&dot=.&comma=%2C |
- | | |
- |-----+-----------------------------------------------------------|
- | & | Form-style query continuation (Sec 3.2.9) |
- | | |
- | | {&var:3} &var=val |
- | | {&list} &list=red,green,blue |
- | | {&list*} &list=red&list=green&list=blue |
- | | {&keys} &keys=semi,%3B,dot,.,comma,%2C |
- | | {&keys*} &semi=%3B&dot=.&comma=%2C |
- | | |
- `-----------------------------------------------------------------'
-
-1.3. Design Considerations
-
- Mechanisms similar to URI Templates have been defined within several
- specifications, including WSDL [WSDL], WADL [WADL], and OpenSearch
- [OpenSearch]. This specification extends and formally defines the
-
-
-
-Gregorio, et al. Standards Track [Page 9]
-
-RFC 6570 URI Template March 2012
-
-
- syntax so that URI Templates can be used consistently across multiple
- Internet applications and within Internet message fields, while at
- the same time retaining compatibility with those earlier definitions.
-
- The URI Template syntax has been designed to carefully balance the
- need for a powerful expansion mechanism with the need for ease of
- implementation. The syntax is designed to be trivial to parse while
- at the same time providing enough flexibility to express many common
- template scenarios. Implementations are able to parse the template
- and perform the expansions in a single pass.
-
- Templates are simple and readable when used with common examples
- because the single-character operators match the URI generic syntax
- delimiters. The operator's associated delimiter (".", ";", "/", "?",
- "&", and "#") is omitted when none of the listed variables are
- defined. Likewise, the expansion process for ";" (path-style
- parameters) will omit the "=" when the variable value is empty,
- whereas the process for "?" (form-style parameters) will not omit the
- "=" when the value is empty. Multiple variables and list values have
- their values joined with "," if there is no predefined joining
- mechanism for the operator. The "+" and "#" operators will
- substitute unencoded reserved characters found inside the variable
- values; the other operators will pct-encode reserved characters found
- in the variable values prior to expansion.
-
- The most common cases for URI spaces can be described with Level 1
- template expressions. If we were only concerned with URI generation,
- then the template syntax could be limited to just simple variable
- expansion, since more complex forms could be generated by changing
- the variable values. However, URI Templates have the additional goal
- of describing the layout of identifiers in terms of preexisting data
- values. Therefore, the template syntax includes operators that
- reflect how resource identifiers are commonly allocated. Likewise,
- since prefix substrings are often used to partition large spaces of
- resources, modifiers on variable values provide a way to specify both
- the substring and the full value string with a single variable name.
-
-1.4. Limitations
-
- Since a URI Template describes a superset of the identifiers, there
- is no implication that every possible expansion for each delimited
- variable expression corresponds to a URI of an existing resource.
- Our expectation is that an application constructing URIs according to
- the template will be provided with an appropriate set of values for
- the variables being substituted, or at least a means of validating
- user data-entry for those values.
-
-
-
-
-
-Gregorio, et al. Standards Track [Page 10]
-
-RFC 6570 URI Template March 2012
-
-
- URI Templates are not URIs: they do not identify an abstract or
- physical resource, they are not parsed as URIs, and they should not
- be used in places where a URI would be expected unless the template
- expressions will be expanded by a template processor prior to use.
- Distinct field, element, or attribute names should be used to
- differentiate protocol elements that carry a URI Template from those
- that expect a URI reference.
-
- Some URI Templates can be used in reverse for the purpose of variable
- matching: comparing the template to a fully formed URI in order to
- extract the variable parts from that URI and assign them to the named
- variables. Variable matching only works well if the template
- expressions are delimited by the beginning or end of the URI or by
- characters that cannot be part of the expansion, such as reserved
- characters surrounding a simple string expression. In general,
- regular expression languages are better suited for variable matching.
-
-1.5. Notational Conventions
-
- The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
- "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
- document are to be interpreted as described in [RFC2119].
-
- This specification uses the Augmented Backus-Naur Form (ABNF)
- notation of [RFC5234]. The following ABNF rules are imported from
- the normative references [RFC5234], [RFC3986], and [RFC3987].
-
- ALPHA = %x41-5A / %x61-7A ; A-Z / a-z
- DIGIT = %x30-39 ; 0-9
- HEXDIG = DIGIT / "A" / "B" / "C" / "D" / "E" / "F"
- ; case-insensitive
-
- pct-encoded = "%" HEXDIG HEXDIG
- unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
- reserved = gen-delims / sub-delims
- gen-delims = ":" / "/" / "?" / "#" / "[" / "]" / "@"
- sub-delims = "!" / "$" / "&" / "'" / "(" / ")"
- / "*" / "+" / "," / ";" / "="
-
- ucschar = %xA0-D7FF / %xF900-FDCF / %xFDF0-FFEF
- / %x10000-1FFFD / %x20000-2FFFD / %x30000-3FFFD
- / %x40000-4FFFD / %x50000-5FFFD / %x60000-6FFFD
- / %x70000-7FFFD / %x80000-8FFFD / %x90000-9FFFD
- / %xA0000-AFFFD / %xB0000-BFFFD / %xC0000-CFFFD
- / %xD0000-DFFFD / %xE1000-EFFFD
-
- iprivate = %xE000-F8FF / %xF0000-FFFFD / %x100000-10FFFD
-
-
-
-
-Gregorio, et al. Standards Track [Page 11]
-
-RFC 6570 URI Template March 2012
-
-
-1.6. Character Encoding and Unicode Normalization
-
- This specification uses the terms "character", "character encoding
- scheme", "code point", "coded character set", "glyph", "non-ASCII",
- "normalization", "protocol element", and "regular expression" as they
- are defined in [RFC6365].
-
- The ABNF notation defines its terminal values to be non-negative
- integers (code points) that are a superset of the US-ASCII coded
- character set [ASCII]. This specification defines terminal values as
- code points within the Unicode coded character set [UNIV6].
-
- In spite of the syntax and template expansion process being defined
- in terms of Unicode code points, it should be understood that
- templates occur in practice as a sequence of characters in whatever
- form or encoding is suitable for the context in which they occur,
- whether that be octets embedded in a network protocol element or
- glyphs painted on the side of a bus. This specification does not
- mandate any particular character encoding scheme for mapping between
- URI Template characters and the octets used to store or transmit
- those characters. When a URI Template appears in a protocol element,
- the character encoding scheme is defined by that protocol; without
- such a definition, a URI Template is assumed to be in the same
- character encoding scheme as the surrounding text. It is only during
- the process of template expansion that a string of characters in a
- URI Template is REQUIRED to be processed as a sequence of Unicode
- code points.
-
- The Unicode Standard [UNIV6] defines various equivalences between
- sequences of characters for various purposes. Unicode Standard Annex
- #15 [UTR15] defines various Normalization Forms for these
- equivalences. The normalization form determines how to consistently
- encode equivalent strings. In theory, all URI processing
- implementations, including template processors, should use the same
- normalization form for generating a URI reference. In practice, they
- do not. If a value has been provided by the same server as the
- resource, then it can be assumed that the string is already in the
- form expected by that server. If a value is provided by a user, such
- as via a data-entry dialog, then the string SHOULD be normalized as
- Normalization Form C (NFC: Canonical Decomposition, followed by
- Canonical Composition) prior to being used in expansions by a
- template processor.
-
- Likewise, when non-ASCII data that represents readable strings is
- pct-encoded for use in a URI reference, a template processor MUST
- first encode the string as UTF-8 [RFC3629] and then pct-encode any
- octets that are not allowed in a URI reference.
-
-
-
-
-Gregorio, et al. Standards Track [Page 12]
-
-RFC 6570 URI Template March 2012
-
-
-2. Syntax
-
- A URI Template is a string of printable Unicode characters that
- contains zero or more embedded variable expressions, each expression
- being delimited by a matching pair of braces ('{', '}').
-
- URI-Template = *( literals / expression )
-
- Although templates (and template processor implementations) are
- described above in terms of four gradual levels, we define the URI-
- Template syntax in terms of the ABNF for Level 4. A template
- processor limited to lower-level templates MAY exclude the ABNF rules
- applicable only to higher levels. However, it is RECOMMENDED that
- all parsers implement the full syntax such that unsupported levels
- can be properly identified as such to the end user.
-
-2.1. Literals
-
- The characters outside of expressions in a URI Template string are
- intended to be copied literally to the URI reference if the character
- is allowed in a URI (reserved / unreserved / pct-encoded) or, if not
- allowed, copied to the URI reference as the sequence of pct-encoded
- triplets corresponding to that character's encoding in UTF-8
- [RFC3629].
-
- literals = %x21 / %x23-24 / %x26 / %x28-3B / %x3D / %x3F-5B
- / %x5D / %x5F / %x61-7A / %x7E / ucschar / iprivate
- / pct-encoded
- ; any Unicode character except: CTL, SP,
- ; DQUOTE, "'", "%" (aside from pct-encoded),
- ; "<", ">", "\", "^", "`", "{", "|", "}"
-
-2.2. Expressions
-
- Template expressions are the parameterized parts of a URI Template.
- Each expression contains an optional operator, which defines the
- expression type and its corresponding expansion process, followed by
- a comma-separated list of variable specifiers (variable names and
- optional value modifiers). If no operator is provided, the
- expression defaults to simple variable expansion of unreserved
- values.
-
- expression = "{" [ operator ] variable-list "}"
- operator = op-level2 / op-level3 / op-reserve
- op-level2 = "+" / "#"
- op-level3 = "." / "/" / ";" / "?" / "&"
- op-reserve = "=" / "," / "!" / "@" / "|"
-
-
-
-
-Gregorio, et al. Standards Track [Page 13]
-
-RFC 6570 URI Template March 2012
-
-
- The operator characters have been chosen to reflect each of their
- roles as reserved characters in the URI generic syntax. The
- operators defined in Section 3 of this specification include:
-
- + Reserved character strings;
-
- # Fragment identifiers prefixed by "#";
-
- . Name labels or extensions prefixed by ".";
-
- / Path segments prefixed by "/";
-
- ; Path parameter name or name=value pairs prefixed by ";";
-
- ? Query component beginning with "?" and consisting of
- name=value pairs separated by "&"; and,
-
- & Continuation of query-style &name=value pairs within
- a literal query component.
-
- The operator characters equals ("="), comma (","), exclamation ("!"),
- at sign ("@"), and pipe ("|") are reserved for future extensions.
-
- The expression syntax specifically excludes use of the dollar ("$")
- and parentheses ["(" and ")"] characters so that they remain
- available for use outside the scope of this specification. For
- example, a macro language might use these characters to apply macro
- substitution to a string prior to that string being processed as a
- URI Template.
-
-2.3. Variables
-
- After the operator (if any), each expression contains a list of one
- or more comma-separated variable specifiers (varspec). The variable
- names serve multiple purposes: documentation for what kinds of values
- are expected, identifiers for associating values within a template
- processor, and the literal string to use for the name in name=value
- expansions (aside from when exploding an associative array).
- Variable names are case-sensitive because the name might be expanded
- within a case-sensitive URI component.
-
- variable-list = varspec *( "," varspec )
- varspec = varname [ modifier-level4 ]
- varname = varchar *( ["."] varchar )
- varchar = ALPHA / DIGIT / "_" / pct-encoded
-
-
-
-
-
-
-Gregorio, et al. Standards Track [Page 14]
-
-RFC 6570 URI Template March 2012
-
-
- A varname MAY contain one or more pct-encoded triplets. These
- triplets are considered an essential part of the variable name and
- are not decoded during processing. A varname containing pct-encoded
- characters is not the same variable as a varname with those same
- characters decoded. Applications that provide URI Templates are
- expected to be consistent in their use of pct-encoding within
- variable names.
-
- An expression MAY reference variables that are unknown to the
- template processor or whose value is set to a special "undefined"
- value, such as undef or null. Such undefined variables are given
- special treatment by the expansion process (Section 3.2.1).
-
- A variable value that is a string of length zero is not considered
- undefined; it has the defined value of an empty string.
-
- In Level 4 templates, a variable may have a composite value in the
- form of a list of values or an associative array of (name, value)
- pairs. Such value types are not directly indicated by the template
- syntax, but they do have an impact on the expansion process
- (Section 3.2.1).
-
- A variable defined as a list value is considered undefined if the
- list contains zero members. A variable defined as an associative
- array of (name, value) pairs is considered undefined if the array
- contains zero members or if all member names in the array are
- associated with undefined values.
-
-2.4. Value Modifiers
-
- Each of the variables in a Level 4 template expression can have a
- modifier indicating either that its expansion is limited to a prefix
- of the variable's value string or that its expansion is exploded as a
- composite value in the form of a value list or an associative array
- of (name, value) pairs.
-
- modifier-level4 = prefix / explode
-
-2.4.1. Prefix Values
-
- A prefix modifier indicates that the variable expansion is limited to
- a prefix of the variable's value string. Prefix modifiers are often
- used to partition an identifier space hierarchically, as is common in
- reference indices and hash-based storage. It also serves to limit
- the expanded value to a maximum number of characters. Prefix
- modifiers are not applicable to variables that have composite values.
-
-
-
-
-
-Gregorio, et al. Standards Track [Page 15]
-
-RFC 6570 URI Template March 2012
-
-
- prefix = ":" max-length
- max-length = %x31-39 0*3DIGIT ; positive integer < 10000
-
- The max-length is a positive integer that refers to a maximum number
- of characters from the beginning of the variable's value as a Unicode
- string. Note that this numbering is in characters, not octets, in
- order to avoid splitting between the octets of a multi-octet-encoded
- character or within a pct-encoded triplet. If the max-length is
- greater than the length of the variable's value, then the entire
- value string is used.
-
- For example,
-
- Given the variable assignments
-
- var := "value"
- semi := ";"
-
- Example Template Expansion
-
- {var} value
- {var:20} value
- {var:3} val
- {semi} %3B
- {semi:2} %3B
-
-2.4.2. Composite Values
-
- An explode ("*") modifier indicates that the variable is to be
- treated as a composite value consisting of either a list of values or
- an associative array of (name, value) pairs. Hence, the expansion
- process is applied to each member of the composite as if it were
- listed as a separate variable. This kind of variable specification
- is significantly less self-documenting than non-exploded variables,
- since there is less correspondence between the variable name and how
- the URI reference appears after expansion.
-
- explode = "*"
-
- Since URI Templates do not contain an indication of type or schema,
- the type for an exploded variable is assumed to be determined by
- context. For example, the processor might be supplied values in a
- form that differentiates values as strings, lists, or associative
- arrays. Likewise, the context in which the template is used (script,
- mark-up language, Interface Definition Language, etc.) might define
- rules for associating variable names with types, structures, or
- schema.
-
-
-
-
-Gregorio, et al. Standards Track [Page 16]
-
-RFC 6570 URI Template March 2012
-
-
- Explode modifiers improve brevity in the URI Template syntax. For
- example, a resource that provides a geographic map for a given street
- address might accept a hundred permutations on fields for address
- input, including partial addresses (e.g., just the city or postal
- code). Such a resource could be described as a template with each
- and every address component listed in order, or with a far more
- simple template that makes use of an explode modifier, as in
-
- /mapper{?address*}
-
- along with some context that defines what the variable named
- "address" can include, such as by reference to some other standard
- for addressing (e.g., [UPU-S42]). A recipient aware of the schema
- can then provide appropriate expansions, such as:
-
- /mapper?city=Newport%20Beach&state=CA
-
- The expansion process for exploded variables is dependent on both the
- operator being used and whether the composite value is to be treated
- as a list of values or as an associative array of (name, value)
- pairs. Structures are processed as if they are an associative array
- with names corresponding to the fields in the structure definition
- and "." separators used to indicate name hierarchy in substructures.
-
- If a variable has a composite structure and only some of the fields
- in that structure have defined values, then only the defined pairs
- are present in the expansion. This can be useful for templates that
- consist of a large number of potential query terms.
-
- An explode modifier applied to a list variable causes the expansion
- to iterate over the list's member values. For path and query
- parameter expansions, each member value is paired with the variable's
- name as a (varname, value) pair. This allows path and query
- parameters to be repeated for multiple values, as in
-
- Given the variable assignments
-
- year := ("1965", "2000", "2012")
- dom := ("example", "com")
-
- Example Template Expansion
-
- find{?year*} find?year=1965&year=2000&year=2012
- www{.dom*} www.example.com
-
-
-
-
-
-
-
-Gregorio, et al. Standards Track [Page 17]
-
-RFC 6570 URI Template March 2012
-
-
-3. Expansion
-
- The process of URI Template expansion is to scan the template string
- from beginning to end, copying literal characters and replacing each
- expression with the result of applying the expression's operator to
- the value of each variable named in the expression. Each variable's
- value MUST be formed prior to template expansion.
-
- The requirements on expansion for each aspect of the URI Template
- grammar are defined in this section. A non-normative algorithm for
- the expansion process as a whole is provided in Appendix A.
-
- If a template processor encounters a character sequence outside an
- expression that does not match the grammar, then
- processing of the template SHOULD cease, the URI reference result
- SHOULD contain the expanded part of the template followed by the
- remainder unexpanded, and the location and type of error SHOULD be
- indicated to the invoking application.
-
- If an error is encountered in an expression, such as an operator or
- value modifier that the template processor does not recognize or does
- not yet support, or a character is found that is not allowed by the
- grammar, then the unprocessed parts of the expression
- SHOULD be copied to the result unexpanded, processing of the
- remainder of the template SHOULD continue, and the location and type
- of error SHOULD be indicated to the invoking application.
-
- If an error occurs, the result returned might not be a valid URI
- reference; it will be an incompletely expanded template string that
- is only intended for diagnostic use.
-
-3.1. Literal Expansion
-
- If the literal character is allowed anywhere in the URI syntax
- (unreserved / reserved / pct-encoded ), then it is copied directly to
- the result string. Otherwise, the pct-encoded equivalent of the
- literal character is copied to the result string by first encoding
- the character as its sequence of octets in UTF-8 and then encoding
- each such octet as a pct-encoded triplet.
-
-3.2. Expression Expansion
-
- Each expression is indicated by an opening brace ("{") character and
- continues until the next closing brace ("}"). Expressions cannot be
- nested.
-
-
-
-
-
-
-Gregorio, et al. Standards Track [Page 18]
-
-RFC 6570 URI Template March 2012
-
-
- An expression is expanded by determining its expression type and then
- following that type's expansion process for each comma-separated
- varspec in the expression. Level 1 templates are limited to the
- default operator (simple string value expansion) and a single
- variable per expression. Level 2 templates are limited to a single
- varspec per expression.
-
- The expression type is determined by looking at the first character
- after the opening brace. If the character is an operator, then
- remember the expression type associated with that operator for later
- expansion decisions and skip to the next character for the variable-
- list. If the first character is not an operator, then the expression
- type is simple string expansion and the first character is the
- beginning of the variable-list.
-
- The examples in the subsections below use the following definitions
- for variable values:
-
- count := ("one", "two", "three")
- dom := ("example", "com")
- dub := "me/too"
- hello := "Hello World!"
- half := "50%"
- var := "value"
- who := "fred"
- base := "http://example.com/home/"
- path := "/foo/bar"
- list := ("red", "green", "blue")
- keys := [("semi",";"),("dot","."),("comma",",")]
- v := "6"
- x := "1024"
- y := "768"
- empty := ""
- empty_keys := []
- undef := null
-
-3.2.1. Variable Expansion
-
- A variable that is undefined (Section 2.3) has no value and is
- ignored by the expansion process. If all of the variables in an
- expression are undefined, then the expression's expansion is the
- empty string.
-
- Variable expansion of a defined, non-empty value results in a
- substring of allowed URI characters. As described in Section 1.6,
- the expansion process is defined in terms of Unicode code points in
- order to ensure that non-ASCII characters are consistently pct-
- encoded in the resulting URI reference. One way for a template
-
-
-
-Gregorio, et al. Standards Track [Page 19]
-
-RFC 6570 URI Template March 2012
-
-
- processor to obtain a consistent expansion is to transcode the value
- string to UTF-8 (if it is not already in UTF-8) and then transform
- each octet that is not in the allowed set into the corresponding pct-
- encoded triplet. Another is to map directly from the value's native
- character encoding to the set of allowed URI characters, with any
- remaining disallowed characters mapping to the sequence of pct-
- encoded triplets that correspond to the octet(s) of that character
- when encoded as UTF-8 [RFC3629].
-
- The allowed set for a given expansion depends on the expression type:
- reserved ("+") and fragment ("#") expansions allow the set of
- characters in the union of ( unreserved / reserved / pct-encoded ) to
- be passed through without pct-encoding, whereas all other expression
- types allow only unreserved characters to be passed through without
- pct-encoding. Note that the percent character ("%") is only allowed
- as part of a pct-encoded triplet and only for reserved/fragment
- expansion: in all other cases, a value character of "%" MUST be pct-
- encoded as "%25" by variable expansion.
-
- If a variable appears more than once in an expression or within
- multiple expressions of a URI Template, the value of that variable
- MUST remain static throughout the expansion process (i.e., the
- variable must have the same value for the purpose of calculating each
- expansion). However, if reserved characters or pct-encoded triplets
- occur in the value, they will be pct-encoded by some expression types
- and not by others.
-
- For a variable that is a simple string value, expansion consists of
- appending the encoded value to the result string. An explode
- modifier has no effect. A prefix modifier limits the expansion to
- the first max-length characters of the decoded value. If the value
- contains multi-octet or pct-encoded characters, care must be taken to
- avoid splitting the value in mid-character: count each Unicode code
- point as one character.
-
- For a variable that is an associative array, expansion depends on
- both the expression type and the presence of an explode modifier. If
- there is no explode modifier, expansion consists of appending a
- comma-separated concatenation of each (name, value) pair that has a
- defined value. If there is an explode modifier, expansion consists
- of appending each pair that has a defined value as either
- "name=value" or, if the value is the empty string and the expression
- type does not indicate form-style parameters (i.e., not a "?" or "&"
- type), simply "name". Both name and value strings are encoded in the
- same way as simple string values. A separator string is appended
- between defined pairs according to the expression type, as defined by
- the following table:
-
-
-
-
-Gregorio, et al. Standards Track [Page 20]
-
-RFC 6570 URI Template March 2012
-
-
- Type Separator
- "," (default)
- + ","
- # ","
- . "."
- / "/"
- ; ";"
- ? "&"
- & "&"
-
- For a variable that is a list of values, expansion depends on both
- the expression type and the presence of an explode modifier. If
- there is no explode modifier, the expansion consists of a comma-
- separated concatenation of the defined member string values. If
- there is an explode modifier and the expression type expands named
- parameters (";", "?", or "&"), then the list is expanded as if it
- were an associative array in which each member value is paired with
- the list's varname. Otherwise, the value will be expanded as if it
- were a list of separate variable values, each value separated by the
- expression type's associated separator as defined by the table above.
-
- Example Template Expansion
-
- {count} one,two,three
- {count*} one,two,three
- {/count} /one,two,three
- {/count*} /one/two/three
- {;count} ;count=one,two,three
- {;count*} ;count=one;count=two;count=three
- {?count} ?count=one,two,three
- {?count*} ?count=one&count=two&count=three
- {&count*} &count=one&count=two&count=three
-
-3.2.2. Simple String Expansion: {var}
-
- Simple string expansion is the default expression type when no
- operator is given.
-
- For each defined variable in the variable-list, perform variable
- expansion, as defined in Section 3.2.1, with the allowed characters
- being those in the unreserved set. If more than one variable has a
- defined value, append a comma (",") to the result string as a
- separator between variable expansions.
-
-
-
-
-
-
-
-
-Gregorio, et al. Standards Track [Page 21]
-
-RFC 6570 URI Template March 2012
-
-
- Example Template Expansion
-
- {var} value
- {hello} Hello%20World%21
- {half} 50%25
- O{empty}X OX
- O{undef}X OX
- {x,y} 1024,768
- {x,hello,y} 1024,Hello%20World%21,768
- ?{x,empty} ?1024,
- ?{x,undef} ?1024
- ?{undef,y} ?768
- {var:3} val
- {var:30} value
- {list} red,green,blue
- {list*} red,green,blue
- {keys} semi,%3B,dot,.,comma,%2C
- {keys*} semi=%3B,dot=.,comma=%2C
-
-3.2.3. Reserved Expansion: {+var}
-
- Reserved expansion, as indicated by the plus ("+") operator for Level
- 2 and above templates, is identical to simple string expansion except
- that the substituted values may also contain pct-encoded triplets and
- characters in the reserved set.
-
- For each defined variable in the variable-list, perform variable
- expansion, as defined in Section 3.2.1, with the allowed characters
- being those in the set (unreserved / reserved / pct-encoded). If
- more than one variable has a defined value, append a comma (",") to
- the result string as a separator between variable expansions.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Gregorio, et al. Standards Track [Page 22]
-
-RFC 6570 URI Template March 2012
-
-
- Example Template Expansion
-
- {+var} value
- {+hello} Hello%20World!
- {+half} 50%25
-
- {base}index http%3A%2F%2Fexample.com%2Fhome%2Findex
- {+base}index http://example.com/home/index
- O{+empty}X OX
- O{+undef}X OX
-
- {+path}/here /foo/bar/here
- here?ref={+path} here?ref=/foo/bar
- up{+path}{var}/here up/foo/barvalue/here
- {+x,hello,y} 1024,Hello%20World!,768
- {+path,x}/here /foo/bar,1024/here
-
- {+path:6}/here /foo/b/here
- {+list} red,green,blue
- {+list*} red,green,blue
- {+keys} semi,;,dot,.,comma,,
- {+keys*} semi=;,dot=.,comma=,
-
-3.2.4. Fragment Expansion: {#var}
-
- Fragment expansion, as indicated by the crosshatch ("#") operator for
- Level 2 and above templates, is identical to reserved expansion
- except that a crosshatch character (fragment delimiter) is appended
- first to the result string if any of the variables are defined.
-
- Example Template Expansion
-
- {#var} #value
- {#hello} #Hello%20World!
- {#half} #50%25
- foo{#empty} foo#
- foo{#undef} foo
- {#x,hello,y} #1024,Hello%20World!,768
- {#path,x}/here #/foo/bar,1024/here
- {#path:6}/here #/foo/b/here
- {#list} #red,green,blue
- {#list*} #red,green,blue
- {#keys} #semi,;,dot,.,comma,,
- {#keys*} #semi=;,dot=.,comma=,
-
-
-
-
-
-
-
-Gregorio, et al. Standards Track [Page 23]
-
-RFC 6570 URI Template March 2012
-
-
-3.2.5. Label Expansion with Dot-Prefix: {.var}
-
- Label expansion, as indicated by the dot (".") operator for Level 3
- and above templates, is useful for describing URI spaces with varying
- domain names or path selectors (e.g., filename extensions).
-
- For each defined variable in the variable-list, append "." to the
- result string and then perform variable expansion, as defined in
- Section 3.2.1, with the allowed characters being those in the
- unreserved set.
-
- Since "." is in the unreserved set, a value that contains a "." has
- the effect of adding multiple labels.
-
- Example Template Expansion
-
- {.who} .fred
- {.who,who} .fred.fred
- {.half,who} .50%25.fred
- www{.dom*} www.example.com
- X{.var} X.value
- X{.empty} X.
- X{.undef} X
- X{.var:3} X.val
- X{.list} X.red,green,blue
- X{.list*} X.red.green.blue
- X{.keys} X.semi,%3B,dot,.,comma,%2C
- X{.keys*} X.semi=%3B.dot=..comma=%2C
- X{.empty_keys} X
- X{.empty_keys*} X
-
-3.2.6. Path Segment Expansion: {/var}
-
- Path segment expansion, as indicated by the slash ("/") operator in
- Level 3 and above templates, is useful for describing URI path
- hierarchies.
-
- For each defined variable in the variable-list, append "/" to the
- result string and then perform variable expansion, as defined in
- Section 3.2.1, with the allowed characters being those in the
- unreserved set.
-
- Note that the expansion process for path segment expansion is
- identical to that of label expansion aside from the substitution of
- "/" instead of ".". However, unlike ".", a "/" is a reserved
- character and will be pct-encoded if found in a value.
-
-
-
-
-
-Gregorio, et al. Standards Track [Page 24]
-
-RFC 6570 URI Template March 2012
-
-
- Example Template Expansion
-
- {/who} /fred
- {/who,who} /fred/fred
- {/half,who} /50%25/fred
- {/who,dub} /fred/me%2Ftoo
- {/var} /value
- {/var,empty} /value/
- {/var,undef} /value
- {/var,x}/here /value/1024/here
- {/var:1,var} /v/value
- {/list} /red,green,blue
- {/list*} /red/green/blue
- {/list*,path:4} /red/green/blue/%2Ffoo
- {/keys} /semi,%3B,dot,.,comma,%2C
- {/keys*} /semi=%3B/dot=./comma=%2C
-
-3.2.7. Path-Style Parameter Expansion: {;var}
-
- Path-style parameter expansion, as indicated by the semicolon (";")
- operator in Level 3 and above templates, is useful for describing URI
- path parameters, such as "path;property" or "path;name=value".
-
- For each defined variable in the variable-list:
-
- o append ";" to the result string;
-
- o if the variable has a simple string value or no explode modifier
- is given, then:
-
- * append the variable name (encoded as if it were a literal
- string) to the result string;
-
- * if the variable's value is not empty, append "=" to the result
- string;
-
- o perform variable expansion, as defined in Section 3.2.1, with the
- allowed characters being those in the unreserved set.
-
-
-
-
-
-
-
-
-
-
-
-
-
-Gregorio, et al. Standards Track [Page 25]
-
-RFC 6570 URI Template March 2012
-
-
- Example Template Expansion
-
- {;who} ;who=fred
- {;half} ;half=50%25
- {;empty} ;empty
- {;v,empty,who} ;v=6;empty;who=fred
- {;v,bar,who} ;v=6;who=fred
- {;x,y} ;x=1024;y=768
- {;x,y,empty} ;x=1024;y=768;empty
- {;x,y,undef} ;x=1024;y=768
- {;hello:5} ;hello=Hello
- {;list} ;list=red,green,blue
- {;list*} ;list=red;list=green;list=blue
- {;keys} ;keys=semi,%3B,dot,.,comma,%2C
- {;keys*} ;semi=%3B;dot=.;comma=%2C
-
-3.2.8. Form-Style Query Expansion: {?var}
-
- Form-style query expansion, as indicated by the question-mark ("?")
- operator in Level 3 and above templates, is useful for describing an
- entire optional query component.
-
- For each defined variable in the variable-list:
-
- o append "?" to the result string if this is the first defined value
- or append "&" thereafter;
-
- o if the variable has a simple string value or no explode modifier
- is given, append the variable name (encoded as if it were a
- literal string) and an equals character ("=") to the result
- string; and,
-
- o perform variable expansion, as defined in Section 3.2.1, with the
- allowed characters being those in the unreserved set.
-
-
- Example Template Expansion
-
- {?who} ?who=fred
- {?half} ?half=50%25
- {?x,y} ?x=1024&y=768
- {?x,y,empty} ?x=1024&y=768&empty=
- {?x,y,undef} ?x=1024&y=768
- {?var:3} ?var=val
- {?list} ?list=red,green,blue
- {?list*} ?list=red&list=green&list=blue
- {?keys} ?keys=semi,%3B,dot,.,comma,%2C
- {?keys*} ?semi=%3B&dot=.&comma=%2C
-
-
-
-Gregorio, et al. Standards Track [Page 26]
-
-RFC 6570 URI Template March 2012
-
-
-3.2.9. Form-Style Query Continuation: {&var}
-
- Form-style query continuation, as indicated by the ampersand ("&")
- operator in Level 3 and above templates, is useful for describing
- optional &name=value pairs in a template that already contains a
- literal query component with fixed parameters.
-
- For each defined variable in the variable-list:
-
- o append "&" to the result string;
-
- o if the variable has a simple string value or no explode modifier
- is given, append the variable name (encoded as if it were a
- literal string) and an equals character ("=") to the result
- string; and,
-
- o perform variable expansion, as defined in Section 3.2.1, with the
- allowed characters being those in the unreserved set.
-
-
- Example Template Expansion
-
- {&who} &who=fred
- {&half} &half=50%25
- ?fixed=yes{&x} ?fixed=yes&x=1024
- {&x,y,empty} &x=1024&y=768&empty=
- {&x,y,undef} &x=1024&y=768
-
- {&var:3} &var=val
- {&list} &list=red,green,blue
- {&list*} &list=red&list=green&list=blue
- {&keys} &keys=semi,%3B,dot,.,comma,%2C
- {&keys*} &semi=%3B&dot=.&comma=%2C
-
-4. Security Considerations
-
- A URI Template does not contain active or executable content.
- However, it might be possible to craft unanticipated URIs if an
- attacker is given control over the template or over the variable
- values within an expression that allows reserved characters in the
- expansion. In either case, the security considerations are largely
- determined by who provides the template, who provides the values to
- use for variables within the template, in what execution context the
- expansion occurs (client or server), and where the resulting URIs are
- used.
-
-
-
-
-
-
-Gregorio, et al. Standards Track [Page 27]
-
-RFC 6570 URI Template March 2012
-
-
- This specification does not limit where URI Templates might be used.
- Current implementations exist within server-side development
- frameworks and within client-side javascript for computed links or
- forms.
-
- Within frameworks, templates usually act as guides for where data
- might occur within later (request-time) URIs in client requests.
- Hence, the security concerns are not in the templates themselves, but
- rather in how the server extracts and processes the user-provided
- data within a normal Web request.
-
- Within client-side implementations, a URI Template has many of the
- same properties as HTML forms, except limited to URI characters and
- possibly included in HTTP header field values instead of just message
- body content. Care ought to be taken to ensure that potentially
- dangerous URI reference strings, such as those beginning with
- "javascript:", do not appear in the expansion unless both the
- template and the values are provided by a trusted source.
-
- Other security considerations are the same as those for URIs, as
- described in Section 7 of [RFC3986].
-
-5. Acknowledgments
-
- The following people made contributions to this specification: Mike
- Burrows, Michaeljohn Clement, DeWitt Clinton, John Cowan, Stephen
- Farrell, Robbie Gates, Vijay K. Gurbani, Peter Johanson, Murray S.
- Kucherawy, James H. Manger, Tom Petch, Marc Portier, Pete Resnick,
- James Snell, and Jiankang Yao.
-
-6. References
-
-6.1. Normative References
-
- [ASCII] American National Standards Institute, "Coded Character
- Set - 7-bit American Standard Code for Information
- Interchange", ANSI X3.4, 1986.
-
- [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
- Requirement Levels", BCP 14, RFC 2119, March 1997.
-
- [RFC3629] Yergeau, F., "UTF-8, a transformation format of ISO
- 10646", STD 63, RFC 3629, November 2003.
-
- [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter,
- "Uniform Resource Identifier (URI): Generic Syntax",
- STD 66, RFC 3986, January 2005.
-
-
-
-
-Gregorio, et al. Standards Track [Page 28]
-
-RFC 6570 URI Template March 2012
-
-
- [RFC3987] Duerst, M. and M. Suignard, "Internationalized Resource
- Identifiers (IRIs)", RFC 3987, January 2005.
-
- [RFC5234] Crocker, D. and P. Overell, "Augmented BNF for Syntax
- Specifications: ABNF", STD 68, RFC 5234, January 2008.
-
- [RFC6365] Hoffman, P. and J. Klensin, "Terminology Used in
- Internationalization in the IETF", BCP 166, RFC 6365,
- September 2011.
-
- [UNIV6] The Unicode Consortium, "The Unicode Standard, Version
- 6.0.0", (Mountain View, CA: The Unicode Consortium,
- 2011. ISBN 978-1-936213-01-6),
- .
-
- [UTR15] Davis, M. and M. Duerst, "Unicode Normalization Forms",
- Unicode Standard Annex # 15, April 2003,
- .
-
-6.2. Informative References
-
- [OpenSearch] Clinton, D., "OpenSearch 1.1", Draft 5, December 2011,
- .
-
- [UPU-S42] Universal Postal Union, "International Postal Address
- Components and Templates", UPU S42-1, November 2002,
- .
-
- [WADL] Hadley, M., "Web Application Description Language",
- World Wide Web Consortium Member Submission
- SUBM-wadl-20090831, August 2009,
- .
-
- [WSDL] Weerawarana, S., Moreau, J., Ryman, A., and R.
- Chinnici, "Web Services Description Language (WSDL)
- Version 2.0 Part 1: Core Language", World Wide Web
- Consortium Recommendation REC-wsdl20-20070626,
- June 2007, .
-
-
-
-
-
-
-
-
-
-Gregorio, et al. Standards Track [Page 29]
-
-RFC 6570 URI Template March 2012
-
-
-Appendix A. Implementation Hints
-
- The normative sections on expansion describe each operator with a
- separate expansion process for the sake of descriptive clarity. In
- actual implementations, we expect the expressions to be processed
- left-to-right using a common algorithm that has only minor variations
- in process per operator. This non-normative appendix describes one
- such algorithm.
-
- Initialize an empty result string and its non-error state.
-
- Scan the template and copy literals to the result string (as in
- Section 3.1) until an expression is indicated by a "{", an error is
- indicated by the presence of a non-literals character other than "{",
- or the template ends. When it ends, return the result string and its
- current error or non-error state.
-
- o If an expression is found, scan the template to the next "}" and
- extract the characters in between the braces.
-
- o If the template ends before a "}", then append the "{" and
- extracted characters to the result string and return with an error
- status indicating the expression is malformed.
-
- Examine the first character of the extracted expression for an
- operator.
-
- o If the expression ended (i.e., is "{}"), an operator is found that
- is unknown or unimplemented, or the character is not in the
- varchar set (Section 2.3), then append "{", the extracted
- expression, and "}" to the result string, remember that the result
- is in an error state, and then go back to scan the remainder of
- the template.
-
- o If a known and implemented operator is found, store the operator
- and skip to the next character to begin the varspec-list.
-
- o Otherwise, store the operator as NUL (simple string expansion).
-
- Use the following value table to determine the processing behavior by
- expression type operator. The entry for "first" is the string to
- append to the result first if any of the expression's variables are
- defined. The entry for "sep" is the separator to append to the
- result before any second (or subsequent) defined variable expansion.
- The entry for "named" is a boolean for whether or not the expansion
- includes the variable or key name when no explode modifier is given.
- The entry for "ifemp" is a string to append to the name if its
- corresponding value is empty. The entry for "allow" indicates what
-
-
-
-Gregorio, et al. Standards Track [Page 30]
-
-RFC 6570 URI Template March 2012
-
-
- characters to allow unencoded within the value expansion: (U) means
- any character not in the unreserved set will be encoded; (U+R) means
- any character not in the union of (unreserved / reserved / pct-
- encoding) will be encoded; and, for both cases, each disallowed
- character is first encoded as its sequence of octets in UTF-8 and
- then each such octet is encoded as a pct-encoded triplet.
-
- .------------------------------------------------------------------.
- | NUL + . / ; ? & # |
- |------------------------------------------------------------------|
- | first | "" "" "." "/" ";" "?" "&" "#" |
- | sep | "," "," "." "/" ";" "&" "&" "," |
- | named | false false false false true true true false |
- | ifemp | "" "" "" "" "" "=" "=" "" |
- | allow | U U+R U U U U U U+R |
- `------------------------------------------------------------------'
-
- With the above table in mind, process the variable-list as follows:
-
- For each varspec, extract a variable name and optional modifier from
- the expression by scanning the variable-list until a character not in
- the varname set is found or the end of the expression is reached.
-
- o If it is the end of the expression and the varname is empty, go
- back to scan the remainder of the template.
-
- o If it is not the end of the expression and the last character
- found indicates a modifier ("*" or ":"), remember that modifier.
- If it is an explode ("*"), scan the next character. If it is a
- prefix (":"), continue scanning the next one to four characters
- for the max-length represented as a decimal integer and then, if
- it is still not the end of the expression, scan the next
- character.
-
- o If it is not the end of the expression and the last character
- found is not a comma (","), append "{", the stored operator (if
- any), the scanned varname and modifier, the remaining expression,
- and "}" to the result string, remember that the result is in an
- error state, and then go back to scan the remainder of the
- template.
-
- Lookup the value for the scanned variable name, and then
-
- o If the varname is unknown or corresponds to a variable with an
- undefined value (Section 2.3), then skip to the next varspec.
-
-
-
-
-
-
-Gregorio, et al. Standards Track [Page 31]
-
-RFC 6570 URI Template March 2012
-
-
- o If this is the first defined variable for this expression, append
- the first string for this expression type to the result string and
- remember that it has been done. Otherwise, append the sep string
- to the result string.
-
- o If this variable's value is a string, then
-
- * if named is true, append the varname to the result string using
- the same encoding process as for literals, and
-
- + if the value is empty, append the ifemp string to the result
- string and skip to the next varspec;
-
- + otherwise, append "=" to the result string.
-
- * if a prefix modifier is present and the prefix length is less
- than the value string length in number of Unicode characters,
- append that number of characters from the beginning of the
- value string to the result string, after pct-encoding any
- characters that are not in the allow set, while taking care not
- to split multi-octet or pct-encoded triplet characters that
- represent a single Unicode code point;
-
- * otherwise, append the value to the result string after pct-
- encoding any characters that are not in the allow set.
-
- o else if no explode modifier is given, then
-
- * if named is true, append the varname to the result string using
- the same encoding process as for literals, and
-
- + if the value is empty, append the ifemp string to the result
- string and skip to the next varspec;
-
- + otherwise, append "=" to the result string; and
-
- * if this variable's value is a list, append each defined list
- member to the result string, after pct-encoding any characters
- that are not in the allow set, with a comma (",") appended to
- the result between each defined list member;
-
- * if this variable's value is an associative array or any other
- form of paired (name, value) structure, append each pair with a
- defined value to the result string as "name,value", after pct-
- encoding any characters that are not in the allow set, with a
- comma (",") appended to the result between each defined pair.
-
-
-
-
-
-Gregorio, et al. Standards Track [Page 32]
-
-RFC 6570 URI Template March 2012
-
-
- o else if an explode modifier is given, then
-
- * if named is true, then for each defined list member or array
- (name, value) pair with a defined value, do:
-
- + if this is not the first defined member/value, append the
- sep string to the result string;
-
- + if this is a list, append the varname to the result string
- using the same encoding process as for literals;
-
- + if this is a pair, append the name to the result string
- using the same encoding process as for literals;
-
- + if the member/value is empty, append the ifemp string to the
- result string; otherwise, append "=" and the member/value to
- the result string, after pct-encoding any member/value
- characters that are not in the allow set.
-
- * else if named is false, then
-
- + if this is a list, append each defined list member to the
- result string, after pct-encoding any characters that are
- not in the allow set, with the sep string appended to the
- result between each defined list member.
-
- + if this is an array of (name, value) pairs, append each pair
- with a defined value to the result string as "name=value",
- after pct-encoding any characters that are not in the allow
- set, with the sep string appended to the result between each
- defined pair.
-
- When the variable-list for this expression is exhausted, go back to
- scan the remainder of the template.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Gregorio, et al. Standards Track [Page 33]
-
-RFC 6570 URI Template March 2012
-
-
-Authors' Addresses
-
- Joe Gregorio
- Google
-
- EMail: joe@bitworking.org
- URI: http://bitworking.org/
-
-
- Roy T. Fielding
- Adobe Systems Incorporated
-
- EMail: fielding@gbiv.com
- URI: http://roy.gbiv.com/
-
-
- Marc Hadley
- The MITRE Corporation
-
- EMail: mhadley@mitre.org
- URI: http://mitre.org/
-
-
- Mark Nottingham
- Rackspace
-
- EMail: mnot@mnot.net
- URI: http://www.mnot.net/
-
-
- David Orchard
- Salesforce.com
-
- EMail: orchard@pacificspirit.com
- URI: http://www.pacificspirit.com/
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Gregorio, et al. Standards Track [Page 34]
-
diff --git a/specifications/auth/rfc7292.txt b/specifications/auth/rfc7292.txt
deleted file mode 100644
index 92ba37d0..00000000
--- a/specifications/auth/rfc7292.txt
+++ /dev/null
@@ -1,1627 +0,0 @@
-
-
-
-
-
-
-Internet Engineering Task Force (IETF) K. Moriarty, Ed.
-Request for Comments: 7292 EMC
-Category: Informational M. Nystrom
-ISSN: 2070-1721 Microsoft Corporation
- S. Parkinson
- A. Rusch
- M. Scott
- RSA
- July 2014
-
-
- PKCS #12: Personal Information Exchange Syntax v1.1
-
-Abstract
-
- PKCS #12 v1.1 describes a transfer syntax for personal identity
- information, including private keys, certificates, miscellaneous
- secrets, and extensions. Machines, applications, browsers, Internet
- kiosks, and so on, that support this standard will allow a user to
- import, export, and exercise a single set of personal identity
- information. This standard supports direct transfer of personal
- information under several privacy and integrity modes.
-
- This document represents a republication of PKCS #12 v1.1 from RSA
- Laboratories' Public Key Cryptography Standard (PKCS) series. By
- publishing this RFC, change control is transferred to the IETF.
-
-IESG Note
-
- The IESG thanks RSA Laboratories for transferring change control to
- the IETF. Enhancements to this specification that preserve backward
- compatibility are expected in an upcoming IETF Standards Track
- document.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Moriarty, et al. Informational [Page 1]
-
-RFC 7292 PKCS12 July 2014
-
-
-Status of This Memo
-
- This document is not an Internet Standards Track specification; it is
- published for informational purposes.
-
- This document is a product of the Internet Engineering Task Force
- (IETF). It represents the consensus of the IETF community. It has
- received public review and has been approved for publication by the
- Internet Engineering Steering Group (IESG). Not all documents
- approved by the IESG are a candidate for any level of Internet
- Standard; see Section 2 of RFC 5741.
-
- Information about the current status of this document, any errata,
- and how to provide feedback on it may be obtained at
- http://www.rfc-editor.org/info/rfc7292.
-
-Copyright Notice
-
- Copyright (c) 2014 IETF Trust and the persons identified as the
- document authors. All rights reserved.
-
- This document is subject to BCP 78 and the IETF Trust's Legal
- Provisions Relating to IETF Documents
- (http://trustee.ietf.org/license-info) in effect on the date of
- publication of this document. Please review these documents
- carefully, as they describe your rights and restrictions with respect
- to this document. Code Components extracted from this document must
- include Simplified BSD License text as described in Section 4.e of
- the Trust Legal Provisions and are provided without warranty as
- described in the Simplified BSD License.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Moriarty, et al. Informational [Page 2]
-
-RFC 7292 PKCS12 July 2014
-
-
-Table of Contents
-
- 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 4
- 1.1. Changes from PKCS #12 Version 1 . . . . . . . . . . . . . 4
- 2. Definitions and Notation . . . . . . . . . . . . . . . . . . 5
- 3. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . 7
- 3.1. Exchange Modes . . . . . . . . . . . . . . . . . . . . . 7
- 3.2. Mode Choice Policies . . . . . . . . . . . . . . . . . . 8
- 3.3. Trusted Public Keys . . . . . . . . . . . . . . . . . . . 8
- 3.4. The AuthenticatedSafe . . . . . . . . . . . . . . . . . . 9
- 4. PFX PDU Syntax . . . . . . . . . . . . . . . . . . . . . . . 10
- 4.1. The AuthenticatedSafe Type . . . . . . . . . . . . . . . 11
- 4.2. The SafeBag Type . . . . . . . . . . . . . . . . . . . . 12
- 4.2.1. The KeyBag Type . . . . . . . . . . . . . . . . . . . 13
- 4.2.2. The PKCS8ShroudedKeyBag Type . . . . . . . . . . . . 13
- 4.2.3. The CertBag Type . . . . . . . . . . . . . . . . . . 13
- 4.2.4. The CRLBag Type . . . . . . . . . . . . . . . . . . . 14
- 4.2.5. The SecretBag Type . . . . . . . . . . . . . . . . . 14
- 4.2.6. The SafeContents Type . . . . . . . . . . . . . . . . 14
- 5. Using PFX PDUs . . . . . . . . . . . . . . . . . . . . . . . 15
- 5.1. Creating PFX PDUs . . . . . . . . . . . . . . . . . . . . 15
- 5.2. Importing Keys, etc., from a PFX PDU . . . . . . . . . . 16
- 6. Security Considerations . . . . . . . . . . . . . . . . . . . 16
- 7. Normative References . . . . . . . . . . . . . . . . . . . . 17
- Appendix A. Message Authentication Codes (MACs) . . . . . . . . 19
- Appendix B. Deriving Keys and IVs from Passwords and Salt . . . 19
- B.1. Password Formatting . . . . . . . . . . . . . . . . . . . 19
- B.2. General Method . . . . . . . . . . . . . . . . . . . . . 20
- B.3. More on the ID Byte . . . . . . . . . . . . . . . . . . . 22
- B.4. Keys for Password Integrity Mode . . . . . . . . . . . . 22
- Appendix C. Keys and IVs for Password Privacy Mode . . . . . . . 22
- Appendix D. ASN.1 Module . . . . . . . . . . . . . . . . . . . . 24
- Appendix E. Intellectual Property Considerations . . . . . . . . 28
- Appendix F. Acknowledgments . . . . . . . . . . . . . . . . . . 28
- Appendix G. About PKCS . . . . . . . . . . . . . . . . . . . . . 28
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Moriarty, et al. Informational [Page 3]
-
-RFC 7292 PKCS12 July 2014
-
-
-1. Introduction
-
- This document represents a republication of PKCS #12 v1.1 from RSA
- Laboratories' Public Key Cryptography Standard (PKCS) series. By
- publishing this RFC, change control is transferred to the IETF. RSA
- and its parent company EMC reserve the right to continue publishing
- and distributing PKCS #12 v1.1 and its predecessors.
-
- The body of this document, except for the Security Considerations
- section, is taken directly from the PKCS #12 v1.1 specification. The
- list of references and the in-line cites have been updated or added
- where appropriate to cite the most current documents in addition to
- those current at the original publication of PKCS #12 v1.1.
-
- This standard describes a transfer syntax for personal identity
- information, including private keys, certificates, miscellaneous
- secrets, and extensions. Machines, applications, browsers, Internet
- kiosks, and so on, that support this standard will allow a user to
- import, export, and exercise a single set of personal identity
- information.
-
- This standard supports direct transfer of personal information under
- several privacy and integrity modes. The most secure of the privacy
- and integrity modes require the source and destination platforms to
- have trusted public/private key pairs usable for digital signatures
- and encryption, respectively. The standard also supports lower-
- security, password-based privacy and integrity modes for those cases
- where trusted public/private key pairs are not available.
-
- This standard should be amenable to both software and hardware
- implementations. Hardware implementations offer physical security in
- tamper-resistant tokens such as smart cards and Personal Computer
- Memory Card International Association (PCMCIA) devices.
-
- This standard can be viewed as building on PKCS #8 [15] [24] by
- including essential but ancillary identity information along with
- private keys and by instituting higher security through public-key
- privacy and integrity modes.
-
-1.1. Changes from PKCS #12 Version 1
-
- This document transfers PKCS #12 [16] into the IETF and includes some
- minor changes from the authors for this submission.
-
- o Addition of hash algorithms.
-
- o Incorporation of Technical Corrigendum #1, which makes some minor
- corrections to the ASN.1 syntax.
-
-
-
-Moriarty, et al. Informational [Page 4]
-
-RFC 7292 PKCS12 July 2014
-
-
- o Removed (from the ASN.1 syntax) 1024 as an example of the
- iteration count.
-
- o Addition of a recommendation that the technique in Appendix B no
- longer be used for a specific mode (password privacy mode) and
- that techniques from PKCS#5 v2.1 be used instead.
-
- o Addition of comments and minor corrections to the ASN.1 module in
- Appendix C.
-
- o Removal of the export regulations discussion in the former
- Appendix D.
-
- o Replacement of RSA with EMC in the "Intellectual Property
- Considerations".
-
- o Many changes and additions to the references.
-
- o A reference was added to NIST SP 800-132 for its recommendations
- on selection of the iteration count value for password integrity
- (part of dictionary-attack resistance).
-
- o Comment included on acronym expansion of PFX: The acronym is
- sometimes expanded as Personal Information Exchange.
-
- o In Appendix B, the phrase "no longer recommended" was changed to
- "not recommended" in the following sentence to address a question
- and make it clear the method was not recommended: "Note that this
- method for password privacy mode is no longer recommended."
-
-2. Definitions and Notation
-
- AlgorithmIdentifier: An ASN.1 type that identifies an algorithm (by
- an object identifier) and any associated parameters. This type is
- defined in [8].
-
- ASN.1: Abstract Syntax Notation One, as defined in [2], [3], [4],
- and [5].
-
- Attribute: An ASN.1 type that identifies an attribute type (by an
- object identifier) and an associated attribute value. The ASN.1
- type Attribute is defined in [7].
-
- Certificate: A digitally signed data unit binding a public key to
- identity information. A specific format for identity certificates
- is defined in [8]. Another format is described in [17].
-
-
-
-
-
-Moriarty, et al. Informational [Page 5]
-
-RFC 7292 PKCS12 July 2014
-
-
- Certificate Revocation List (CRL): A digitally signed list of
- certificates that should no longer be honored, having been revoked
- by the issuers or a higher authority. One format for CRLs is
- defined in [8].
-
- ContentInfo: An ASN.1 type used to hold data that may have been
- cryptographically protected. This type is defined in [21] and
- [14].
-
- DER: Distinguished Encoding Rules, as defined in [6].
-
- Destination platform: The ultimate, final target platform for the
- personal information originating from the source platform. Even
- though certain information may be transported from the destination
- platform to the source platform, the ultimate target for personal
- information is always called the destination platform.
-
- DigestInfo: An ASN.1 type used to hold a message digest. This type
- is defined in [21] and [14].
-
- Encryption Key Pair (DestEncK): A public/private key pair used for
- the public-key privacy mode of this standard. The public half is
- called PDestEncK (TPDestEncK when emphasizing that the public key
- is "trusted"), and the private half is called VDestEncK.
-
- Export time: The time that a user reads personal information from a
- source platform and transforms the information into an
- interoperable, secure Protocol Data Unit (PDU).
-
- Import time: The time that a user writes personal information from a
- Safe PDU to a destination platform.
-
- Message Authentication Code (MAC): A type of collision-resistant,
- "unpredictable" function of a message and a secret key. MACs are
- used for data authentication and are akin to secret-key digital
- signatures in many respects.
-
- Object Identifier: A sequence of integers that uniquely identifies
- an associated data object in a global name space administrated by
- a hierarchy of naming authorities. This is a primitive data type
- in ASN.1.
-
- PFX: The top-level exchange PDU defined in this standard. The
- acronym is sometimes expanded as Personal Information Exchange.
-
-
-
-
-
-
-
-Moriarty, et al. Informational [Page 6]
-
-RFC 7292 PKCS12 July 2014
-
-
- Platform: A combination of machine, operating system, and
- applications software within which the user exercises personal
- identity. An application, in this context, is software that uses
- personal information. Two platforms differ if their machine types
- differ or if their applications software differs. There is at
- least one platform per user in multi-user systems.
-
- Protocol Data Unit (PDU): A sequence of bits in machine-independent
- format constituting a message in a protocol.
-
- Shrouding: Encryption as applied to private keys, possibly in
- concert with a policy that prevents the plaintext of the key from
- ever being visible beyond a certain, well-defined interface.
-
- Signature Key Pair (SrcSigK): A platform-specific signature key pair
- used for the public-key integrity mode of this standard. The
- public half is called PSrcSigK (TPSrcSigK when emphasizing that
- the public key is "trusted"), and the private half is called
- VSrcSigK.
-
- Source platform: The origin platform of the personal information
- ultimately intended for the destination platform. Even though
- certain information may be transported from the destination
- platform to the source platform, the platform that is the origin
- of personal information is always called the source platform.
-
-3. Overview
-
-3.1. Exchange Modes
-
- There are four combinations of privacy modes and integrity modes.
- The privacy modes use encryption to protect personal information from
- exposure, and the integrity modes protect personal information from
- tampering. Without protection from tampering, an adversary could
- conceivably substitute invalid information for the user's personal
- information without the user being aware of the substitution.
-
- The following are the privacy modes:
-
- o Public-key privacy mode: Personal information is enveloped on the
- source platform using a trusted encryption public key of a known
- destination platform (see Section 3.3). The envelope is opened
- with the corresponding private key.
-
-
-
-
-
-
-
-
-Moriarty, et al. Informational [Page 7]
-
-RFC 7292 PKCS12 July 2014
-
-
- o Password privacy mode: Personal information is encrypted with a
- symmetric key derived from a user name and a privacy password, as
- in [22] and [13]. If password integrity mode is used as well, the
- privacy password and the integrity password may or may not be the
- same.
-
- The following are the integrity modes:
-
- o Public-key integrity mode: Integrity is guaranteed through a
- digital signature on the contents of the PFX PDU, which is
- produced using the source platform's private signature key. The
- signature is verified on the destination platform by using the
- corresponding public key (see Section 3.4).
-
- o Password integrity mode: Integrity is guaranteed through a Message
- Authentication Code (MAC) derived from a secret integrity
- password. If password privacy mode is used as well, the privacy
- password and the integrity password may or may not be the same.
-
-3.2. Mode Choice Policies
-
- All combinations of the privacy and integrity modes are permitted in
- this standard. Of course, good security policy suggests that certain
- practices be avoided, e.g., it can be unwise to transport private
- keys without physical protection when using password privacy mode or
- when using public-key privacy mode with weak symmetric encryption.
-
- In general, the public-key modes for both privacy and integrity are
- preferable to the password modes (from a security viewpoint).
- However, it is not always possible to use the public-key modes. For
- example, it may not be known at export time what the destination
- platform is; if this is the case, then the use of the public-key
- privacy mode is precluded.
-
-3.3. Trusted Public Keys
-
- Asymmetric key pairs may be used in this standard in two ways:
- public-key privacy mode and public-key integrity mode. For public-
- key privacy mode, an encryption key pair is required; for public-key
- integrity mode, a signature key pair is required.
-
- It may be appropriate for the keys discussed in this section to be
- platform-specific keys dedicated solely for the purpose of
- transporting a user's personal information. Whether or not that is
- the case, though, the keys discussed here should not be confused with
- the user's personal keys that the user wishes to transport from one
- platform to another. (These latter keys are stored within the PDU.)
-
-
-
-
-Moriarty, et al. Informational [Page 8]
-
-RFC 7292 PKCS12 July 2014
-
-
- For public-key privacy mode, the private key from the encryption key
- pair is kept on the destination platform, where it is ultimately used
- to open a private envelope. The corresponding trusted public key is
- called TPDestEncK.
-
- For public-key integrity mode, the private key from the signature
- pair is kept on the source platform, where it is used to sign
- personal information. The corresponding trusted public key is called
- TPSrcSigK.
-
- For both uses of public/private key pairs, the public key from the
- key pair must be transported to the other platform such that it is
- trusted to have originated at the correct platform. Judging whether
- or not a public key is trusted in this sense must ultimately be left
- to the user. There are a variety of methods for ensuring that a
- public key is trusted.
-
- The processes of imbuing keys with trust and of verifying
- trustworthiness of keys are not discussed further in this document.
- Whenever asymmetric keys are discussed in what follows, the public
- keys are assumed to be trusted.
-
-3.4. The AuthenticatedSafe
-
- Each compliant platform shall be able to import and export
- AuthenticatedSafe PDUs wrapped in PFX PDUs.
-
- For integrity, the AuthenticatedSafe is either signed (if public-key
- integrity mode is used) or MACed (if password integrity mode is used)
- to produce a PFX PDU. If the AuthenticatedSafe is signed, then it is
- accompanied by a digital signature, which was produced on the source
- platform with a private signature key, VSrcSigK, corresponding to a
- trusted public signature key, TPSrcSigK. TPSrcSigK must accompany
- the PFX to the destination platform, where the user can verify the
- trust in the key and can verify the signature on the
- AuthenticatedSafe. If the AuthenticatedSafe is MACed, then it is
- accompanied by a MAC computed from a secret integrity password, salt
- bits, an iteration count, and the contents of the AuthenticatedSafe.
-
- The AuthenticatedSafe itself consists of a sequence of ContentInfo
- values, some of which may consist of plaintext (data), and others
- that may either be enveloped (if public-key privacy mode is used) or
- encrypted (if password privacy mode is used). If the contents are
- enveloped, then they are encrypted with a symmetric cipher under a
- freshly generated key, which is in turn encrypted with RSA asymmetric
- encryption. The RSA public key used to encrypt the symmetric key is
- called TPDestEncK and corresponds to an RSA private key, VDestEncK,
- on the destination platform. TPDestEncK needs to be trusted by the
-
-
-
-Moriarty, et al. Informational [Page 9]
-
-RFC 7292 PKCS12 July 2014
-
-
- user when it is used at export time. If the contents are encrypted,
- then they are encrypted with a symmetric cipher under a key derived
- from a secret privacy password, salt bits, and an iteration counter.
-
- Each ContentInfo contains an arbitrary collection of private keys,
- PKCS #8-shrouded private keys, certificates, CRLs, or opaque data
- objects, at the user's discretion, stored in values of type
- SafeContents.
-
- The raison d'etre for the unencrypted option is that some governments
- restrict certain uses of cryptography. Having several parts in an
- AuthenticatedSafe keeps implementers' options open. For example, it
- may be the case that strong cryptography can be used to make PKCS
- #8-shrouded keys, but then these shrouded keys should not be further
- encrypted, because super-encryption can limit a product's
- exportability. The multi-part AuthenticatedSafe design permits this
- possibility.
-
- Around the AuthenticatedSafe is the integrity-mode wrapper, which
- protects the entire contents of the AuthenticatedSafe (including
- unencrypted parts, if they are present). This is the reverse of the
- wrapping order in many protocols, in which privacy is the outermost
- protection. This latter, more-common wrapping order avoids
- signatures on encrypted data, which are undesirable under certain
- circumstances; however, these circumstances do not apply to this
- document, and it is therefore preferable to protect the integrity of
- as much information as possible.
-
-4. PFX PDU Syntax
-
- This format corresponds to the data model presented above, with
- wrappers for privacy and integrity. This section makes free
- reference to PKCS #7 [14] [21] and assumes the reader is familiar
- with terms defined in that document.
-
- All modes of direct exchange use the same PDU format. ASN.1 and BER-
- encoding ensure platform independence.
-
- This standard has one ASN.1 export: PFX. This is the outer integrity
- wrapper. Instances of PFX contain:
-
- 1. A version indicator. The version shall be v3 for this version of
- this document.
-
- 2. A PKCS #7 ContentInfo, whose contentType is signedData in public-
- key integrity mode and data in password integrity mode.
-
-
-
-
-
-Moriarty, et al. Informational [Page 10]
-
-RFC 7292 PKCS12 July 2014
-
-
- 3. An optional instance of MacData, present only in password
- integrity. This object, if present, contains a PKCS #7
- DigestInfo, which holds the MAC value, a macSalt, and an
- iterationCount. As described in Appendix B, the MAC key is
- derived from the password, the macSalt, and the iterationCount;
- as described in Section 5, the MAC is computed from the authSafe
- value and the MAC key via HMAC [11] [20]. The password and the
- MAC key are not actually present anywhere in the PFX. The salt
- and (to a certain extent) the iteration count thwarts dictionary
- attacks against the integrity password. See NIST Special
- Publication 800-132 [12] about how to choose a reasonable value
- for the iteration count.
-
- PFX ::= SEQUENCE {
- version INTEGER {v3(3)}(v3,...),
- authSafe ContentInfo,
- macData MacData OPTIONAL
- }
-
- MacData ::= SEQUENCE {
- mac DigestInfo,
- macSalt OCTET STRING,
- iterations INTEGER DEFAULT 1
- -- Note: The default is for historical reasons and its
- -- use is deprecated.
- }
-
-4.1. The AuthenticatedSafe Type
-
- As mentioned, the contentType field of authSafe shall be of type data
- or signedData. The content field of the authSafe shall, either
- directly (data case) or indirectly (signedData case), contain a BER-
- encoded value of type AuthenticatedSafe.
-
- AuthenticatedSafe ::= SEQUENCE OF ContentInfo
- -- Data if unencrypted
- -- EncryptedData if password-encrypted
- -- EnvelopedData if public key-encrypted
-
- An AuthenticatedSafe contains a sequence of ContentInfo values. The
- content field of these ContentInfo values contains either plaintext,
- encrypted, or enveloped data. In the case of encrypted or enveloped
- data, the plaintext of the data holds the BER-encoding of an instance
- of SafeContents. Section 5.1 of this document describes the
- construction of values of type AuthenticatedSafe in more detail.
-
-
-
-
-
-
-Moriarty, et al. Informational [Page 11]
-
-RFC 7292 PKCS12 July 2014
-
-
-4.2. The SafeBag Type
-
- The SafeContents type is made up of SafeBags. Each SafeBag holds one
- piece of information -- a key, a certificate, etc. -- which is
- identified by an object identifier.
-
- SafeContents ::= SEQUENCE OF SafeBag
-
- SafeBag ::= SEQUENCE {
- bagId BAG-TYPE.&id ({PKCS12BagSet})
- bagValue [0] EXPLICIT BAG-TYPE.&Type({PKCS12BagSet}{@bagId}),
- bagAttributes SET OF PKCS12Attribute OPTIONAL
- }
-
- PKCS12Attribute ::= SEQUENCE {
- attrId ATTRIBUTE.&id ({PKCS12AttrSet}),
- attrValues SET OF ATTRIBUTE.&Type ({PKCS12AttrSet}{@attrId})
- } -- This type is compatible with the X.500 type 'Attribute'
-
- PKCS12AttrSet ATTRIBUTE ::= {
- friendlyName | -- from PKCS #9 [23]
- localKeyId, -- from PKCS #9
- ... -- Other attributes are allowed
- }
-
- The optional bagAttributes field allows users to assign nicknames and
- identifiers to keys, etc., and permits visual tools to display
- meaningful strings of some sort to the user.
-
- Six types of SafeBags are defined in this version of this document:
-
- bagtypes OBJECT IDENTIFIER ::= {pkcs-12 10 1}
-
- BAG-TYPE ::= TYPE-IDENTIFIER
-
- keyBag BAG-TYPE ::=
- {KeyBag IDENTIFIED BY {bagtypes 1}}
- pkcs8ShroudedKeyBag BAG-TYPE ::=
- {PKCS8ShroudedKeyBag IDENTIFIED BY {bagtypes 2}}
- certBag BAG-TYPE ::=
- {CertBag IDENTIFIED BY {bagtypes 3}}
- crlBag BAG-TYPE ::=
- {CRLBag IDENTIFIED BY {bagtypes 4}}
- secretBag BAG-TYPE ::=
- {SecretBag IDENTIFIED BY {bagtypes 5}}
- safeContentsBag BAG-TYPE ::=
- {SafeContents IDENTIFIED BY {bagtypes 6}}
-
-
-
-
-Moriarty, et al. Informational [Page 12]
-
-RFC 7292 PKCS12 July 2014
-
-
- PKCS12BagSet BAG-TYPE ::= {
- keyBag |
- pkcs8ShroudedKeyBag |
- certBag |
- crlBag |
- secretBag |
- safeContentsBag,
- ... -- For future extensions
- }
-
- As new bag types become recognized in future versions of this
- standard, the PKCS12BagSet may be extended.
-
-4.2.1. The KeyBag Type
-
- A KeyBag is a PKCS #8 PrivateKeyInfo. Note that a KeyBag contains
- only one private key.
-
- KeyBag ::= PrivateKeyInfo
-
-4.2.2. The PKCS8ShroudedKeyBag Type
-
- A PKCS8ShroudedKeyBag holds a private key, which has been shrouded in
- accordance with PKCS #8. Note that a PKCS8ShroudedKeyBag holds only
- one shrouded private key.
-
- PKCS8ShroudedKeyBag ::= EncryptedPrivateKeyInfo
-
-4.2.3. The CertBag Type
-
- A CertBag contains a certificate of a certain type. Object
- identifiers are used to distinguish between different certificate
- types.
-
- CertBag ::= SEQUENCE {
- certId BAG-TYPE.&id ({CertTypes}),
- certValue [0] EXPLICIT BAG-TYPE.&Type ({CertTypes}{@certId})
- }
-
- x509Certificate BAG-TYPE ::=
- {OCTET STRING IDENTIFIED BY {certTypes 1}}
- -- DER-encoded X.509 certificate stored in OCTET STRING
- sdsiCertificate BAG-TYPE ::=
- {IA5String IDENTIFIED BY {certTypes 2}}
- -- Base64-encoded SDSI certificate stored in IA5String
-
- CertTypes BAG-TYPE ::= {
- x509Certificate |
-
-
-
-Moriarty, et al. Informational [Page 13]
-
-RFC 7292 PKCS12 July 2014
-
-
- sdsiCertificate,
- ... -- For future extensions
- }
-
-4.2.4. The CRLBag Type
-
- A CRLBag contains a Certificate Revocation List (CRL) of a certain
- type. Object identifiers are used to distinguish between different
- CRL types.
-
- CRLBag ::= SEQUENCE {
- crlId BAG-TYPE.&id ({CRLTypes}),
- crlValue [0] EXPLICIT BAG-TYPE.&Type ({CRLTypes}{@crlId})
- }
-
- x509CRL BAG-TYPE ::=
- {OCTET STRING IDENTIFIED BY {crlTypes 1}}
- -- DER-encoded X.509 CRL stored in OCTET STRING
-
- CRLTypes BAG-TYPE ::= {
- x509CRL,
- ... -- For future extensions
- }
-
-4.2.5. The SecretBag Type
-
- Each of the user's miscellaneous personal secrets is contained in an
- instance of SecretBag, which holds an object identifier-dependent
- value. Note that a SecretBag contains only one secret.
-
- SecretBag ::= SEQUENCE {
- secretTypeId BAG-TYPE.&id ({SecretTypes}),
- secretValue [0] EXPLICIT BAG-TYPE.&Type ({SecretTypes}
- {@secretTypeId})
- }
-
- SecretTypes BAG-TYPE ::= {
- ... -- For future extensions
- }
-
- Implementers can add values to this set at their own discretion.
-
-4.2.6. The SafeContents Type
-
- The sixth type of bag that can be held in a SafeBag is a
- SafeContents. This recursive structure allows for arbitrary nesting
- of multiple KeyBags, PKCS8ShroudedKeyBags, CertBags, CRLBags, and
- SecretBags within the top-level SafeContents.
-
-
-
-Moriarty, et al. Informational [Page 14]
-
-RFC 7292 PKCS12 July 2014
-
-
-5. Using PFX PDUs
-
- This section describes the creation and usage of PFX PDUs.
-
-5.1. Creating PFX PDUs
-
- The steps for creating PFX PDUs are as follows.
-
- 1. It is somewhat clear from the ASN.1 how to make a number of
- instances of SafeContents, each containing a number of (possibly
- nested) instances of SafeBag. Let us assume, therefore, a number
- of instances SC_1, SC_2,..., SC_n of SafeContents. Note that
- there can be a more or less arbitrary number of instances of
- SafeContents in a PFX PDU. As will be seen in step 2, each
- instance can be encrypted (or not) separately.
-
- 2. For each SCI, depending on the chosen encryption option,
-
- A. If SC_i is not to be encrypted, make a ContentInfo CI_i
- holding content type Data. The contents of the Data OCTET
- STRING shall be a BER-encoding of SC_i (including tag,
- length, and value octets).
-
- B. If SC_i is to be encrypted with a password, make a
- ContentInfo CI_i of type EncryptedData. The
- encryptedContentInfo field of CI_i has its contentType field
- set to data and its encryptedContent field set to the
- encryption of the BER-encoding of SC_i (note that the tag and
- length octets shall be present).
-
- C. If SC_i is to be encrypted with a public key, make a
- ContentInfo CI_i of type EnvelopedData in essentially the
- same fashion as the EncryptedData ContentInfo was made in B.
-
- 3. Make an instance of AuthenticatedSafe by stringing together the
- CI_i's in a SEQUENCE.
-
- 4. Make a ContentInfo T holding content type Data. The contents of
- the Data OCTET STRING shall be a BER-encoding of the
- AuthenticatedSafe value (including tag, length, and value
- octets).
-
- 5. For integrity protection,
-
- A. If the PFX PDU is to be authenticated with a digital
- signature, make a ContentInfo C of type SignedData. The
- contentInfo field of the SignedData in C has T in it. C is
- the ContentInfo in the top-level PFX structure.
-
-
-
-Moriarty, et al. Informational [Page 15]
-
-RFC 7292 PKCS12 July 2014
-
-
- B. If the PFX PDU is to be authenticated with HMAC, then an HMAC
- with SHA-1, SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224,
- or SHA-512/256 is computed on the contents of the Data in T
- (i.e., excluding the OCTET STRING tag and length bytes).
- This is exactly what would be initially digested in step 5A
- if public-key authentication were being used.
-
-5.2. Importing Keys, etc., from a PFX PDU
-
- Importation from a PFX is accomplished essentially by reversing the
- procedure for creating a PFX. In general, when an application
- imports keys, etc., from a PFX, it should ignore any object
- identifiers that it is not familiar with. At times, it may be
- appropriate to alert the user to the presence of such object
- identifiers.
-
- Special care may be taken by the application when importing an item
- in the PFX would require overwriting an item that already exists
- locally. The behavior of the application when such an item is
- encountered may depend on what the item is (i.e., it may be that a
- PKCS #8-shrouded private key and a CRL should be treated differently
- here). Appropriate behavior may be to ask the user what action
- should be taken for this item.
-
-6. Security Considerations
-
- When using passwords in privacy or integrity mode, it needs to be
- considered that password-based cryptography is generally limited in
- the security that it can provide, particularly for methods such as
- those defined in this document where off-line password search is
- possible. While the use of salt and iteration count can increase the
- complexity of attack, it is essential that passwords are selected
- well and that relevant guidelines (e.g., NIST SP 800-61-1) are taken
- into account. It is also important that passwords be protected well
- if stored.
-
- When choosing a salt value in password privacy or integrity mode, the
- recommendations in Section 4 of PKCS #5 2.1 [13] [22] should be taken
- into account. Ideally, the salt is as long as the output of the hash
- function being used and consists of randomly generated data.
-
-
-
-
-
-
-
-
-
-
-
-Moriarty, et al. Informational [Page 16]
-
-RFC 7292 PKCS12 July 2014
-
-
-7. Normative References
-
- [1] Dobbertin, H., "The status of MD5 after a recent attack.",
- CryptoBytes Vol. 2, #2, 1996.
-
- [2] ISO/IEC, "Information technology -- Abstract Syntax Notation
- One (ASN.1) -- Specification of basic notation", ISO/IEC
- 8824-1:2008, 2008.
-
- [3] ISO/IEC, "Information technology -- Abstract Syntax Notation
- One (ASN.1) -- Information object specification", ISO/IEC
- 8824-2:2008, 2008.
-
- [4] ISO/IEC, "Information technology -- Abstract Syntax Notation
- One (ASN.1) -- Constraint specification", ISO/IEC 88247-3:2008,
- 2008.
-
- [5] ISO/IEC, "Information technology -- Abstract Syntax Notation
- One (ASN.1) -- Parameterization of ASN.1 specifications",
- ISO/IEC 8824-4:2008, 2008.
-
- [6] ISO/IEC, "Information Technology - ASN.1 Encoding Rules:
- Specification of Basic Encoding Rules (BER), Canonical Encoding
- Rules (CER), and Distinguished Encoding Rules", ISO/IEC
- 8825-1:2008, 2008.
-
- [7] ISO/IEC, "Information technology -- Open Systems
- Interconnection -- The Directory: Models", ISO/IEC 9594-2:1997,
- 1997.
-
- [8] ISO/IEC, "Information technology -- Open Systems
- Interconnection -- The Directory: Authentication Framework",
- ISO/IEC 9594-8:1997, 1997.
-
- [9] Microsoft, "PFX: Personal Exchange Syntax and Protocol
- Standard", ISO/IEC Version 0.020, January 1997.
-
- [10] National Institute of Standards and Technology (NIST), "Secure
- Hash Standard", FIPS Publication 180-4, March 2012.
-
- [11] National Institute of Standards and Technology (NIST), "The
- Keyed-Hash Message Authentication Code (HMAC)", FIPS
- Publication 198-1, July 2008.
-
- [12] National Institute of Standards and Technology (NIST), "The
- Recommendation for Password-Based Key Derivation, Part 1:
- Storage Applications", NIST Special Publication 800-132,
- December 2010.
-
-
-
-Moriarty, et al. Informational [Page 17]
-
-RFC 7292 PKCS12 July 2014
-
-
- [13] RSA Laboratories, "PKCS #5: Password-Based Encryption
- Standard", PKCS Version 2.1, October 2012.
-
- [14] RSA Laboratories, "PKCS #7: Cryptographic Message Syntax
- Standard", PKCS Version 1.5, November 1993.
-
- [15] RSA Laboratories, "PKCS #8: Private-Key Information Syntax
- Standard", PKCS Version 1.2, November 1993.
-
- [16] RSA Laboratories, "PKCS #12: Personal Information Exchange
- Syntax", PKCS Version 1.1, December 2012.
-
- [17] Rivest, R. and B. Lampson, "SDSI - A Simple Distributed
- Security Infrastructure", 1996,
- .
-
- [18] Turner, S. and L. Chen, "MD2 to Historic Status", RFC 6149,
- March 2011.
-
- [19] Rivest, R., "The MD5 Message-Digest Algorithm", RFC 1321, April
- 1992.
-
- [20] Krawczyk, H., Bellare, M., and R. Canetti, "HMAC: Keyed-
- Hashing for Message Authentication", RFC 2104, February 1997.
-
- [21] Kaliski, B., "PKCS #7: Cryptographic Message Syntax Version
- 1.5", RFC 2315, March 1998.
-
- [22] Kaliski, B., "PKCS #5: Password-Based Cryptography
- Specification Version 2.0", RFC 2898, September 2000.
-
- [23] Nystrom, M. and B. Kaliski, "PKCS #9: Selected Object Classes
- and Attribute Types Version 2.0", RFC 2985, November 2000.
-
- [24] Turner, S., "Asymmetric Key Packages", RFC 5958, August 2010.
-
- [25] Turner, S. and L. Chen, "Updated Security Considerations for
- the MD5 Message-Digest and the HMAC-MD5 Algorithms", RFC 6151,
- March 2011.
-
-
-
-
-
-
-
-
-
-
-
-
-Moriarty, et al. Informational [Page 18]
-
-RFC 7292 PKCS12 July 2014
-
-
-Appendix A. Message Authentication Codes (MACs)
-
- A MAC is a special type of function of a message (data bits) and an
- integrity key. It can be computed or checked only by someone
- possessing both the message and the integrity key. Its security
- follows from the secrecy of the integrity key. In this standard,
- MACing is used in password integrity mode.
-
- This document uses a particular type of MAC called HMAC [11] [20],
- which can be constructed from any of a variety of hash functions.
- Note that the specifications in [20] and [11] differ somewhat from
- the specification in [9]. The hash function HMAC is based on is
- identified in the MacData, which holds the MAC; for this version of
- this standard, the hash function can be one of the following: SHA-1,
- SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224, or SHA-512/256 [10].
- As indicated in Appendix B.4, this structure implies that the same
- hash algorithm must be used to derive the MAC key itself in password
- integrity mode and that the MAC key has either 160, 224, 256, 384, or
- 512 bits.
-
- When password integrity mode is used to secure a PFX PDU, an HMAC
- with SHA-1, SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224, or
- SHA-512/256 is computed on the BER-encoding of the contents of the
- content field of the authSafe field in the PFX PDU (see Section 5.1).
-
-Appendix B. Deriving Keys and IVs from Passwords and Salt
-
- Note that this method for password privacy mode is not recommended
- and is deprecated for new usage. The procedures and algorithms
- defined in PKCS #5 v2.1 [13] [22] should be used instead.
- Specifically, PBES2 should be used as encryption scheme, with PBKDF2
- as the key derivation function.
-
- The method presented here is still used to generate the key in
- password integrity mode.
-
- We present here a general method for using a hash function to produce
- various types of pseudorandom bits from a password and a string of
- salt bits. This method is used for password privacy mode and
- password integrity mode in the present standard.
-
-B.1. Password Formatting
-
- The underlying password-based encryption methods in PKCS #5 v2.1 view
- passwords (and salt) as being simple byte strings. The underlying
- password-based encryption methods and the underlying password-based
- authentication methods in this version of this document are similar.
-
-
-
-
-Moriarty, et al. Informational [Page 19]
-
-RFC 7292 PKCS12 July 2014
-
-
- What's left unspecified in the above paragraph is precisely where the
- byte string representing a password comes from. (This is not an
- issue with salt strings, since they are supplied as a password-based
- encryption (or authentication) parameter.) PKCS #5 v2.1 says: "[...]
- a password is considered to be an octet string of arbitrary length
- whose interpretation as a text string is unspecified. In the
- interest of interoperability, however, it is recommended that
- applications follow some common text encoding rules. ASCII and UTF-8
- are two possibilities."
-
- In this specification, however, all passwords are created from
- BMPStrings with a NULL terminator. This means that each character in
- the original BMPString is encoded in 2 bytes in big-endian format
- (most-significant byte first). There are no Unicode byte order
- marks. The 2 bytes produced from the last character in the BMPString
- are followed by 2 additional bytes with the value 0x00.
-
- To illustrate with a simple example, if a user enters the 6-character
- password "Beavis", the string that PKCS #12 implementations should
- treat as the password is the following string of 14 bytes:
-
- 0x00 0x42 0x00 0x65 0x00 0x61 0x00 0x76 0x00 0x69 0x00 0x73 0x00 0x00
-
-B.2. General Method
-
- Let H be a hash function built around a compression function f:
-
- Z_2^u x Z_2^v -> Z_2^u
-
- (that is, H has a chaining variable and output of length u bits, and
- the message input to the compression function of H is v bits). The
- values for u and v are as follows:
-
- HASH FUNCTION VALUE u VALUE v
- MD2, MD5 128 512
- SHA-1 160 512
- SHA-224 224 512
- SHA-256 256 512
- SHA-384 384 1024
- SHA-512 512 1024
- SHA-512/224 224 1024
- SHA-512/256 256 1024
-
-
-
-
-
-
-
-
-
-Moriarty, et al. Informational [Page 20]
-
-RFC 7292 PKCS12 July 2014
-
-
- Furthermore, let r be the iteration count.
-
- We assume here that u and v are both multiples of 8, as are the
- lengths of the password and salt strings (which we denote by p and s,
- respectively) and the number n of pseudorandom bits required. In
- addition, u and v are of course non-zero.
-
- For information on security considerations for MD5 [19], see [25] and
- [1], and on those for MD2, see [18].
-
- The following procedure can be used to produce pseudorandom bits for
- a particular "purpose" that is identified by a byte called "ID". The
- meaning of this ID byte will be discussed later.
-
- 1. Construct a string, D (the "diversifier"), by concatenating v/8
- copies of ID.
-
- 2. Concatenate copies of the salt together to create a string S of
- length v(ceiling(s/v)) bits (the final copy of the salt may be
- truncated to create S). Note that if the salt is the empty
- string, then so is S.
-
- 3. Concatenate copies of the password together to create a string P
- of length v(ceiling(p/v)) bits (the final copy of the password
- may be truncated to create P). Note that if the password is the
- empty string, then so is P.
-
- 4. Set I=S||P to be the concatenation of S and P.
-
- 5. Set c=ceiling(n/u).
-
- 6. For i=1, 2, ..., c, do the following:
-
- A. Set A2=H^r(D||I). (i.e., the r-th hash of D||1,
- H(H(H(... H(D||I))))
-
- B. Concatenate copies of Ai to create a string B of length v
- bits (the final copy of Ai may be truncated to create B).
-
- C. Treating I as a concatenation I_0, I_1, ..., I_(k-1) of v-bit
- blocks, where k=ceiling(s/v)+ceiling(p/v), modify I by
- setting I_j=(I_j+B+1) mod 2^v for each j.
-
- 7. Concatenate A_1, A_2, ..., A_c together to form a pseudorandom
- bit string, A.
-
- 8. Use the first n bits of A as the output of this entire process.
-
-
-
-
-Moriarty, et al. Informational [Page 21]
-
-RFC 7292 PKCS12 July 2014
-
-
- If the above process is being used to generate a DES key, the process
- should be used to create 64 random bits, and the key's parity bits
- should be set after the 64 bits have been produced. Similar concerns
- hold for 2-key and 3-key triple-DES keys, for CDMF keys, and for any
- similar keys with parity bits "built into them".
-
-B.3. More on the ID Byte
-
- This standard specifies 3 different values for the ID byte mentioned
- above:
-
- 1. If ID=1, then the pseudorandom bits being produced are to be used
- as key material for performing encryption or decryption.
-
- 2. If ID=2, then the pseudorandom bits being produced are to be used
- as an IV (Initial Value) for encryption or decryption.
-
- 3. If ID=3, then the pseudorandom bits being produced are to be used
- as an integrity key for MACing.
-
-B.4. Keys for Password Integrity Mode
-
- When password integrity mode is used to protect a PFX PDU, a password
- and salt are used to derive a MAC key. As with password privacy
- mode, the password is a Unicode string, and the salt is a byte
- string. No particular lengths are prescribed in this standard for
- either the password or the salt, but the general advice about
- passwords and salt that is given in Appendix C applies here, as well.
-
- The hash function used to derive MAC keys is whatever hash function
- is going to be used for MACing. The MAC keys that are derived have
- the same length as the hash function's output. In this version of
- this standard, SHA-1, SHA-224, SHA-256, SHA384, SHA-512, SHA-512/224,
- or SHA/512/256 can be used to perform MACing, and so the MAC keys can
- be 160, 224, 256, 384, or 512 bits. See Appendix A for more
- information on MACing.
-
-Appendix C. Keys and IVs for Password Privacy Mode
-
- As stated at the start of Appendix B, use of this method for password
- privacy mode is not recommended; this specification of keys and IVs
- for password privacy mode is retained for backwards compatibility
- with PKCS #12 v1.0 only.
-
- When password privacy mode is used to encrypt a PFX PDU, a password
- (typically entered by the user), a salt and an iteration parameter
- are used to derive a key (and an IV, if necessary). The password is
-
-
-
-
-Moriarty, et al. Informational [Page 22]
-
-RFC 7292 PKCS12 July 2014
-
-
- a Unicode string, and as such, each character in it is represented by
- 2 bytes. The salt is a byte string and so can be represented
- directly as a sequence of bytes.
-
- This standard does not prescribe a length for the password. As
- usual, however, too short a password might compromise privacy. A
- particular application might well require a user-entered privacy
- password for creating a PFX PDU to have a password exceeding some
- specific length.
-
- This standard does not prescribe a length for the salt either.
- Ideally, the salt is as long as the output of the hash function being
- used and consists of completely random bits.
-
- The iteration count is recommended to be 1024 or more. (See [22] and
- [13] for more information.)
-
- The PBES1 encryption scheme defined in PKCS #5 provides a number of
- algorithm identifiers for deriving keys and IVs; here, we specify a
- few more, all of which use the procedure detailed in Appendices B.2
- and B.3 to construct keys (and IVs, where needed). As is implied by
- their names, all of the object identifiers below use the hash
- function SHA-1.
-
-pkcs-12PbeIds OBJECT IDENTIFIER ::= {pkcs-12 1}
-pbeWithSHAAnd128BitRC4 OBJECT IDENTIFIER ::= {pkcs-12PbeIds 1}
-pbeWithSHAAnd40BitRC4 OBJECT IDENTIFIER ::= {pkcs-12PbeIds 2}
-pbeWithSHAAnd3-KeyTripleDES-CBC OBJECT IDENTIFIER ::= {pkcs-12PbeIds 3}
-pbeWithSHAAnd2-KeyTripleDES-CBC OBJECT IDENTIFIER ::= {pkcs-12PbeIds 4}
-pbeWithSHAAnd128BitRC2-CBC OBJECT IDENTIFIER ::= {pkcs-12PbeIds 5}
-pbewithSHAAnd40BitRC2-CBC OBJECT IDENTIFIER ::= {pkcs-12PbeIds 6}
-
- Each of the six PBE object identifiers above has the following ASN.1
- type for parameters:
-
- pkcs-12PbeParams ::= SEQUENCE {
- salt OCTET STRING,
- iterations INTEGER
- }
-
- The pkcs-12PbeParams holds the salt that is used to generate the key
- (and IV, if necessary) and the number of iterations to carry out.
-
- Note that the first two algorithm identifiers above (the algorithm
- identifiers for RC4) only derive keys; it is unnecessary to derive an
- IV for RC4.
-
-
-
-
-
-Moriarty, et al. Informational [Page 23]
-
-RFC 7292 PKCS12 July 2014
-
-
- This section is here for two reasons: first, to enable backwards
- compatibility as described in the first paragraph of this section;
- second, because it is still used in password integrity mode. In
- order to not use it in password integrity mode, the ASN.1 definitions
- require updates. This document recommends that future definitions of
- the PFX structure replace the existing MacData object, optionally
- present in password integrity mode, with a new object definition that
- holds a MAC based on PKCS#5 [13] [22] PBMAC1 message authentication
- scheme. This change would simplify the requirements for key
- derivation functions used across all parts of the PFX structure.
-
-Appendix D. ASN.1 Module
-
- This appendix documents all ASN.1 types, values, and object sets
- defined in this specification. It does so by providing an ASN.1
- module called PKCS-12.
-
- PKCS-12 {
- iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-12(12)
- modules(0) pkcs-12(1)}
-
- -- PKCS #12 v1.1 ASN.1 Module
- -- Revised October 27, 2012
-
- -- This module has been checked for conformance with the ASN.1 standard
- -- by the OSS ASN.1 Tools
-
- DEFINITIONS IMPLICIT TAGS ::=
-
- BEGIN
-
- -- EXPORTS ALL
- -- All types and values defined in this module are exported for use
- -- in other ASN.1 modules.
-
- IMPORTS
-
- informationFramework
- FROM UsefulDefinitions {joint-iso-itu-t(2) ds(5) module(1)
- usefulDefinitions(0) 3}
-
- ATTRIBUTE
- FROM InformationFramework informationFramework
-
- ContentInfo, DigestInfo
- FROM PKCS-7 {iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1)
- pkcs-7(7) modules(0) pkcs-7(1)}
-
-
-
-
-Moriarty, et al. Informational [Page 24]
-
-RFC 7292 PKCS12 July 2014
-
-
- PrivateKeyInfo, EncryptedPrivateKeyInfo
- FROM PKCS-8 {iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1)
- pkcs-8(8) modules(1) pkcs-8(1)}
-
- pkcs-9, friendlyName, localKeyId, certTypes, crlTypes
- FROM PKCS-9 {iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1)
- pkcs-9(9) modules(0) pkcs-9(1)};
-
- -- ============================
- -- Object identifiers
- -- ============================
-
-
- rsadsi OBJECT IDENTIFIER ::= {iso(1) member-body(2) us(840)
- rsadsi(113549)}
- pkcs OBJECT IDENTIFIER ::= {rsadsi pkcs(1)}
- pkcs-12 OBJECT IDENTIFIER ::= {pkcs 12}
- pkcs-12PbeIds OBJECT IDENTIFIER ::= {pkcs-12 1}
- pbeWithSHAAnd128BitRC4 OBJECT IDENTIFIER ::= {pkcs-12PbeIds 1}
- pbeWithSHAAnd40BitRC4 OBJECT IDENTIFIER ::= {pkcs-12PbeIds 2}
- pbeWithSHAAnd3-KeyTripleDES-CBC OBJECT IDENTIFIER ::= {pkcs-12PbeIds 3}
- pbeWithSHAAnd2-KeyTripleDES-CBC OBJECT IDENTIFIER ::= {pkcs-12PbeIds 4}
- pbeWithSHAAnd128BitRC2-CBC OBJECT IDENTIFIER ::= {pkcs-12PbeIds 5}
- pbewithSHAAnd40BitRC2-CBC OBJECT IDENTIFIER ::= {pkcs-12PbeIds 6}
-
- bagtypes OBJECT IDENTIFIER ::= {pkcs-12 10 1}
-
- -- ============================
- -- The PFX PDU
- -- ============================
-
- PFX ::= SEQUENCE {
- version INTEGER {v3(3)}(v3,...),
- authSafe ContentInfo,
- macData MacData OPTIONAL
- }
-
- MacData ::= SEQUENCE {
- mac DigestInfo,
- macSalt OCTET STRING,
- iterations INTEGER DEFAULT 1
- -- Note: The default is for historical reasons and its use is
- -- deprecated.
- }
-
-
-
-
-
-
-
-Moriarty, et al. Informational [Page 25]
-
-RFC 7292 PKCS12 July 2014
-
-
- AuthenticatedSafe ::= SEQUENCE OF ContentInfo
- -- Data if unencrypted
- -- EncryptedData if password-encrypted
- -- EnvelopedData if public key-encrypted
-
- SafeContents ::= SEQUENCE OF SafeBag
-
- SafeBag ::= SEQUENCE {
- bagId BAG-TYPE.&id ({PKCS12BagSet}),
- bagValue [0] EXPLICIT BAG-TYPE.&Type({PKCS12BagSet}{@bagId}),
- bagAttributes SET OF PKCS12Attribute OPTIONAL
- }
-
- -- ============================
- -- Bag types
- -- ============================
-
- keyBag BAG-TYPE ::=
- {KeyBag IDENTIFIED BY {bagtypes 1}}
- pkcs8ShroudedKeyBag BAG-TYPE ::=
- {PKCS8ShroudedKeyBag IDENTIFIED BY {bagtypes 2}}
- certBag BAG-TYPE ::=
- {CertBag IDENTIFIED BY {bagtypes 3}}
- crlBag BAG-TYPE ::=
- {CRLBag IDENTIFIED BY {bagtypes 4}}
- secretBag BAG-TYPE ::=
- {SecretBag IDENTIFIED BY {bagtypes 5}}
- safeContentsBag BAG-TYPE ::=
- {SafeContents IDENTIFIED BY {bagtypes 6}}
-
- PKCS12BagSet BAG-TYPE ::= {
- keyBag |
- pkcs8ShroudedKeyBag |
- certBag |
- crlBag |
- secretBag |
- safeContentsBag,
- ... -- For future extensions
- }
-
- BAG-TYPE ::= TYPE-IDENTIFIER
-
- -- KeyBag
- KeyBag ::= PrivateKeyInfo
-
- -- Shrouded KeyBag
- PKCS8ShroudedKeyBag ::= EncryptedPrivateKeyInfo
-
-
-
-
-Moriarty, et al. Informational [Page 26]
-
-RFC 7292 PKCS12 July 2014
-
-
- -- CertBag
- CertBag ::= SEQUENCE {
- certId BAG-TYPE.&id ({CertTypes}),
- certValue [0] EXPLICIT BAG-TYPE.&Type ({CertTypes}{@certId})
- }
-
- x509Certificate BAG-TYPE ::=
- {OCTET STRING IDENTIFIED BY {certTypes 1}}
- -- DER-encoded X.509 certificate stored in OCTET STRING
- sdsiCertificate BAG-TYPE ::=
- {IA5String IDENTIFIED BY {certTypes 2}}
- -- Base64-encoded SDSI certificate stored in IA5String
-
- CertTypes BAG-TYPE ::= {
- x509Certificate |
- sdsiCertificate,
- ... -- For future extensions
- }
-
- -- CRLBag
- CRLBag ::= SEQUENCE {
- crlId BAG-TYPE.&id ({CRLTypes}),
- crltValue [0] EXPLICIT BAG-TYPE.&Type ({CRLTypes}{@crlId})
- }
-
- x509CRL BAG-TYPE ::=
- {OCTET STRING IDENTIFIED BY {crlTypes 1}}
- -- DER-encoded X.509 CRL stored in OCTET STRING
-
- CRLTypes BAG-TYPE ::= {
- x509CRL,
- ... -- For future extensions
- }
-
- -- Secret Bag
- SecretBag ::= SEQUENCE {
- secretTypeId BAG-TYPE.&id ({SecretTypes}),
- secretValue [0] EXPLICIT BAG-TYPE.&Type ({SecretTypes}
- {@secretTypeId})
- }
-
- SecretTypes BAG-TYPE ::= {
- ... -- For future extensions
- }
-
- -- ============================
- -- Attributes
- -- ============================
-
-
-
-Moriarty, et al. Informational [Page 27]
-
-RFC 7292 PKCS12 July 2014
-
-
- PKCS12Attribute ::= SEQUENCE {
- attrId ATTRIBUTE.&id ({PKCS12AttrSet}),
- attrValues SET OF ATTRIBUTE.&Type ({PKCS12AttrSet}{@attrId})
- } -- This type is compatible with the X.500 type 'Attribute'
-
- PKCS12AttrSet ATTRIBUTE ::= {
- friendlyName |
- localKeyId,
- ... -- Other attributes are allowed
- }
-
- END
-
-Appendix E. Intellectual Property Considerations
-
- EMC Corporation makes no patent claims on the general constructions
- described in this document, although specific underlying techniques
- may be covered.
-
- RC2 and RC4 are trademarks of EMC Corporation.
-
- EMC Corporation makes no representations regarding intellectual
- property claims by other parties. Such determination is the
- responsibility of the user.
-
-Appendix F. Acknowledgments
-
- Many thanks to Dan Simon of Microsoft Corporation and Jim Spring of
- Netscape Communications Corporation for their assistance in preparing
- early drafts of this document. Especial thanks to Brian Beckman of
- Microsoft Corporation for writing the specification that this
- document is based on.
-
-Appendix G. About PKCS
-
- The Public-Key Cryptography Standards are specifications produced by
- RSA Laboratories in cooperation with secure systems developers
- worldwide for the purpose of accelerating the deployment of public-
- key cryptography. First published in 1991 as a result of meetings
- with a small group of early adopters of public-key technology, the
- PKCS documents have become widely referenced and implemented.
- Contributions from the PKCS series have become part of many formal
- and de facto standards, including ANSI X9 documents, PKIX, SET, S/
- MIME, and SSL.
-
- Further development of PKCS occurs through the IETF. Suggestions for
- improvement are welcome.
-
-
-
-
-Moriarty, et al. Informational [Page 28]
-
-RFC 7292 PKCS12 July 2014
-
-
-Authors' Addresses
-
- Kathleen M. Moriarty (editor)
- EMC Corporation
- 176 South Street
- Hopkinton, MA
- United States
-
- EMail: Kathleen.Moriarty@emc.com
-
-
- Magnus Nystrom
- Microsoft Corporation
- 1 Microsoft Way
- Redmond, WA 98052
- United States
-
- EMail: mnystrom@microsoft.com
-
-
- Sean Parkinson
- RSA Security Inc.
- 345 Queen Street
- Brisbane, QLD, 4000
- Australia
-
- EMail: Sean.Parkinson@rsa.com
-
-
- Andreas Rusch
- RSA Security Inc.
- 345 Queen Street
- Brisbane, QLD, 4000
- Australia
-
- EMail: Andreas.Rusch@rsa.com
-
-
- Michael Scott
- RSA Security Inc.
- 345 Queen Street
- Brisbane, QLD, 4000
- Australia
-
- EMail: Michael2.Scott@rsa.com
-
-
-
-
-
-
-Moriarty, et al. Informational [Page 29]
-
diff --git a/specifications/auth/rfc7636.pdf b/specifications/auth/rfc7636.pdf
deleted file mode 100644
index 4acbd26f..00000000
Binary files a/specifications/auth/rfc7636.pdf and /dev/null differ
diff --git a/specifications/auth/rfc7636.txt b/specifications/auth/rfc7636.txt
deleted file mode 100644
index 653cb531..00000000
--- a/specifications/auth/rfc7636.txt
+++ /dev/null
@@ -1,1123 +0,0 @@
-
-
-
-
-
-
-Internet Engineering Task Force (IETF) N. Sakimura, Ed.
-Request for Comments: 7636 Nomura Research Institute
-Category: Standards Track J. Bradley
-ISSN: 2070-1721 Ping Identity
- N. Agarwal
- Google
- September 2015
-
-
- Proof Key for Code Exchange by OAuth Public Clients
-
-Abstract
-
- OAuth 2.0 public clients utilizing the Authorization Code Grant are
- susceptible to the authorization code interception attack. This
- specification describes the attack as well as a technique to mitigate
- against the threat through the use of Proof Key for Code Exchange
- (PKCE, pronounced "pixy").
-
-Status of This Memo
-
- This is an Internet Standards Track document.
-
- This document is a product of the Internet Engineering Task Force
- (IETF). It represents the consensus of the IETF community. It has
- received public review and has been approved for publication by the
- Internet Engineering Steering Group (IESG). Further information on
- Internet Standards is available in Section 2 of RFC 5741.
-
- Information about the current status of this document, any errata,
- and how to provide feedback on it may be obtained at
- http://www.rfc-editor.org/info/rfc7636.
-
-Copyright Notice
-
- Copyright (c) 2015 IETF Trust and the persons identified as the
- document authors. All rights reserved.
-
- This document is subject to BCP 78 and the IETF Trust's Legal
- Provisions Relating to IETF Documents
- (http://trustee.ietf.org/license-info) in effect on the date of
- publication of this document. Please review these documents
- carefully, as they describe your rights and restrictions with respect
- to this document. Code Components extracted from this document must
- include Simplified BSD License text as described in Section 4.e of
- the Trust Legal Provisions and are provided without warranty as
- described in the Simplified BSD License.
-
-
-
-
-Sakimura, et al. Standards Track [Page 1]
-
-RFC 7636 OAUTH PKCE September 2015
-
-
-Table of Contents
-
- 1. Introduction ....................................................3
- 1.1. Protocol Flow ..............................................5
- 2. Notational Conventions ..........................................6
- 3. Terminology .....................................................7
- 3.1. Abbreviations ..............................................7
- 4. Protocol ........................................................8
- 4.1. Client Creates a Code Verifier .............................8
- 4.2. Client Creates the Code Challenge ..........................8
- 4.3. Client Sends the Code Challenge with the
- Authorization Request ......................................9
- 4.4. Server Returns the Code ....................................9
- 4.4.1. Error Response ......................................9
- 4.5. Client Sends the Authorization Code and the Code
- Verifier to the Token Endpoint ............................10
- 4.6. Server Verifies code_verifier before Returning the
- Tokens ....................................................10
- 5. Compatibility ..................................................11
- 6. IANA Considerations ............................................11
- 6.1. OAuth Parameters Registry .................................11
- 6.2. PKCE Code Challenge Method Registry .......................11
- 6.2.1. Registration Template ..............................12
- 6.2.2. Initial Registry Contents ..........................13
- 7. Security Considerations ........................................13
- 7.1. Entropy of the code_verifier ..............................13
- 7.2. Protection against Eavesdroppers ..........................13
- 7.3. Salting the code_challenge ................................14
- 7.4. OAuth Security Considerations .............................14
- 7.5. TLS Security Considerations ...............................15
- 8. References .....................................................15
- 8.1. Normative References ......................................15
- 8.2. Informative References ....................................16
- Appendix A. Notes on Implementing Base64url Encoding without
- Padding .............................................17
- Appendix B. Example for the S256 code_challenge_method ...........17
- Acknowledgements ..................................................19
- Authors' Addresses ................................................20
-
-
-
-
-
-
-
-
-
-
-
-
-
-Sakimura, et al. Standards Track [Page 2]
-
-RFC 7636 OAUTH PKCE September 2015
-
-
-1. Introduction
-
- OAuth 2.0 [RFC6749] public clients are susceptible to the
- authorization code interception attack.
-
- In this attack, the attacker intercepts the authorization code
- returned from the authorization endpoint within a communication path
- not protected by Transport Layer Security (TLS), such as inter-
- application communication within the client's operating system.
-
- Once the attacker has gained access to the authorization code, it can
- use it to obtain the access token.
-
- Figure 1 shows the attack graphically. In step (1), the native
- application running on the end device, such as a smartphone, issues
- an OAuth 2.0 Authorization Request via the browser/operating system.
- The Redirection Endpoint URI in this case typically uses a custom URI
- scheme. Step (1) happens through a secure API that cannot be
- intercepted, though it may potentially be observed in advanced attack
- scenarios. The request then gets forwarded to the OAuth 2.0
- authorization server in step (2). Because OAuth requires the use of
- TLS, this communication is protected by TLS and cannot be
- intercepted. The authorization server returns the authorization code
- in step (3). In step (4), the Authorization Code is returned to the
- requester via the Redirection Endpoint URI that was provided in step
- (1).
-
- Note that it is possible for a malicious app to register itself as a
- handler for the custom scheme in addition to the legitimate OAuth 2.0
- app. Once it does so, the malicious app is now able to intercept the
- authorization code in step (4). This allows the attacker to request
- and obtain an access token in steps (5) and (6), respectively.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Sakimura, et al. Standards Track [Page 3]
-
-RFC 7636 OAUTH PKCE September 2015
-
-
- +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+
- | End Device (e.g., Smartphone) |
- | |
- | +-------------+ +----------+ | (6) Access Token +----------+
- | |Legitimate | | Malicious|<--------------------| |
- | |OAuth 2.0 App| | App |-------------------->| |
- | +-------------+ +----------+ | (5) Authorization | |
- | | ^ ^ | Grant | |
- | | \ | | | |
- | | \ (4) | | | |
- | (1) | \ Authz| | | |
- | Authz| \ Code | | | Authz |
- | Request| \ | | | Server |
- | | \ | | | |
- | | \ | | | |
- | v \ | | | |
- | +----------------------------+ | | |
- | | | | (3) Authz Code | |
- | | Operating System/ |<--------------------| |
- | | Browser |-------------------->| |
- | | | | (2) Authz Request | |
- | +----------------------------+ | +----------+
- +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+
-
- Figure 1: Authorization Code Interception Attack
-
- A number of pre-conditions need to hold for this attack to work:
-
- 1. The attacker manages to register a malicious application on the
- client device and registers a custom URI scheme that is also used
- by another application. The operating systems must allow a custom
- URI scheme to be registered by multiple applications.
-
- 2. The OAuth 2.0 authorization code grant is used.
-
- 3. The attacker has access to the OAuth 2.0 [RFC6749] "client_id" and
- "client_secret" (if provisioned). All OAuth 2.0 native app
- client-instances use the same "client_id". Secrets provisioned in
- client binary applications cannot be considered confidential.
-
- 4. Either one of the following condition is met:
-
- 4a. The attacker (via the installed application) is able to
- observe only the responses from the authorization endpoint.
- When "code_challenge_method" value is "plain", only this
- attack is mitigated.
-
-
-
-
-
-Sakimura, et al. Standards Track [Page 4]
-
-RFC 7636 OAUTH PKCE September 2015
-
-
- 4b. A more sophisticated attack scenario allows the attacker to
- observe requests (in addition to responses) to the
- authorization endpoint. The attacker is, however, not able to
- act as a man in the middle. This was caused by leaking http
- log information in the OS. To mitigate this,
- "code_challenge_method" value must be set either to "S256" or
- a value defined by a cryptographically secure
- "code_challenge_method" extension.
-
- While this is a long list of pre-conditions, the described attack has
- been observed in the wild and has to be considered in OAuth 2.0
- deployments. While the OAuth 2.0 threat model (Section 4.4.1 of
- [RFC6819]) describes mitigation techniques, they are, unfortunately,
- not applicable since they rely on a per-client instance secret or a
- per-client instance redirect URI.
-
- To mitigate this attack, this extension utilizes a dynamically
- created cryptographically random key called "code verifier". A
- unique code verifier is created for every authorization request, and
- its transformed value, called "code challenge", is sent to the
- authorization server to obtain the authorization code. The
- authorization code obtained is then sent to the token endpoint with
- the "code verifier", and the server compares it with the previously
- received request code so that it can perform the proof of possession
- of the "code verifier" by the client. This works as the mitigation
- since the attacker would not know this one-time key, since it is sent
- over TLS and cannot be intercepted.
-
-1.1. Protocol Flow
-
- +-------------------+
- | Authz Server |
- +--------+ | +---------------+ |
- | |--(A)- Authorization Request ---->| | |
- | | + t(code_verifier), t_m | | Authorization | |
- | | | | Endpoint | |
- | |<-(B)---- Authorization Code -----| | |
- | | | +---------------+ |
- | Client | | |
- | | | +---------------+ |
- | |--(C)-- Access Token Request ---->| | |
- | | + code_verifier | | Token | |
- | | | | Endpoint | |
- | |<-(D)------ Access Token ---------| | |
- +--------+ | +---------------+ |
- +-------------------+
-
- Figure 2: Abstract Protocol Flow
-
-
-
-Sakimura, et al. Standards Track [Page 5]
-
-RFC 7636 OAUTH PKCE September 2015
-
-
- This specification adds additional parameters to the OAuth 2.0
- Authorization and Access Token Requests, shown in abstract form in
- Figure 2.
-
- A. The client creates and records a secret named the "code_verifier"
- and derives a transformed version "t(code_verifier)" (referred to
- as the "code_challenge"), which is sent in the OAuth 2.0
- Authorization Request along with the transformation method "t_m".
-
- B. The Authorization Endpoint responds as usual but records
- "t(code_verifier)" and the transformation method.
-
- C. The client then sends the authorization code in the Access Token
- Request as usual but includes the "code_verifier" secret generated
- at (A).
-
- D. The authorization server transforms "code_verifier" and compares
- it to "t(code_verifier)" from (B). Access is denied if they are
- not equal.
-
- An attacker who intercepts the authorization code at (B) is unable to
- redeem it for an access token, as they are not in possession of the
- "code_verifier" secret.
-
-2. Notational Conventions
-
- The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
- "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
- "OPTIONAL" in this document are to be interpreted as described in
- "Key words for use in RFCs to Indicate Requirement Levels" [RFC2119].
- If these words are used without being spelled in uppercase, then they
- are to be interpreted with their natural language meanings.
-
- This specification uses the Augmented Backus-Naur Form (ABNF)
- notation of [RFC5234].
-
- STRING denotes a sequence of zero or more ASCII [RFC20] characters.
-
- OCTETS denotes a sequence of zero or more octets.
-
- ASCII(STRING) denotes the octets of the ASCII [RFC20] representation
- of STRING where STRING is a sequence of zero or more ASCII
- characters.
-
- BASE64URL-ENCODE(OCTETS) denotes the base64url encoding of OCTETS,
- per Appendix A, producing a STRING.
-
-
-
-
-
-Sakimura, et al. Standards Track [Page 6]
-
-RFC 7636 OAUTH PKCE September 2015
-
-
- BASE64URL-DECODE(STRING) denotes the base64url decoding of STRING,
- per Appendix A, producing a sequence of octets.
-
- SHA256(OCTETS) denotes a SHA2 256-bit hash [RFC6234] of OCTETS.
-
-3. Terminology
-
- In addition to the terms defined in OAuth 2.0 [RFC6749], this
- specification defines the following terms:
-
- code verifier
- A cryptographically random string that is used to correlate the
- authorization request to the token request.
-
- code challenge
- A challenge derived from the code verifier that is sent in the
- authorization request, to be verified against later.
-
- code challenge method
- A method that was used to derive code challenge.
-
- Base64url Encoding
- Base64 encoding using the URL- and filename-safe character set
- defined in Section 5 of [RFC4648], with all trailing '='
- characters omitted (as permitted by Section 3.2 of [RFC4648]) and
- without the inclusion of any line breaks, whitespace, or other
- additional characters. (See Appendix A for notes on implementing
- base64url encoding without padding.)
-
-3.1. Abbreviations
-
- ABNF Augmented Backus-Naur Form
-
- Authz Authorization
-
- PKCE Proof Key for Code Exchange
-
- MITM Man-in-the-middle
-
- MTI Mandatory To Implement
-
-
-
-
-
-
-
-
-
-
-
-Sakimura, et al. Standards Track [Page 7]
-
-RFC 7636 OAUTH PKCE September 2015
-
-
-4. Protocol
-
-4.1. Client Creates a Code Verifier
-
- The client first creates a code verifier, "code_verifier", for each
- OAuth 2.0 [RFC6749] Authorization Request, in the following manner:
-
- code_verifier = high-entropy cryptographic random STRING using the
- unreserved characters [A-Z] / [a-z] / [0-9] / "-" / "." / "_" / "~"
- from Section 2.3 of [RFC3986], with a minimum length of 43 characters
- and a maximum length of 128 characters.
-
- ABNF for "code_verifier" is as follows.
-
- code-verifier = 43*128unreserved
- unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
- ALPHA = %x41-5A / %x61-7A
- DIGIT = %x30-39
-
- NOTE: The code verifier SHOULD have enough entropy to make it
- impractical to guess the value. It is RECOMMENDED that the output of
- a suitable random number generator be used to create a 32-octet
- sequence. The octet sequence is then base64url-encoded to produce a
- 43-octet URL safe string to use as the code verifier.
-
-4.2. Client Creates the Code Challenge
-
- The client then creates a code challenge derived from the code
- verifier by using one of the following transformations on the code
- verifier:
-
- plain
- code_challenge = code_verifier
-
- S256
- code_challenge = BASE64URL-ENCODE(SHA256(ASCII(code_verifier)))
-
- If the client is capable of using "S256", it MUST use "S256", as
- "S256" is Mandatory To Implement (MTI) on the server. Clients are
- permitted to use "plain" only if they cannot support "S256" for some
- technical reason and know via out-of-band configuration that the
- server supports "plain".
-
- The plain transformation is for compatibility with existing
- deployments and for constrained environments that can't use the S256
- transformation.
-
-
-
-
-
-Sakimura, et al. Standards Track [Page 8]
-
-RFC 7636 OAUTH PKCE September 2015
-
-
- ABNF for "code_challenge" is as follows.
-
- code-challenge = 43*128unreserved
- unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
- ALPHA = %x41-5A / %x61-7A
- DIGIT = %x30-39
-
-4.3. Client Sends the Code Challenge with the Authorization Request
-
- The client sends the code challenge as part of the OAuth 2.0
- Authorization Request (Section 4.1.1 of [RFC6749]) using the
- following additional parameters:
-
- code_challenge
- REQUIRED. Code challenge.
-
- code_challenge_method
- OPTIONAL, defaults to "plain" if not present in the request. Code
- verifier transformation method is "S256" or "plain".
-
-4.4. Server Returns the Code
-
- When the server issues the authorization code in the authorization
- response, it MUST associate the "code_challenge" and
- "code_challenge_method" values with the authorization code so it can
- be verified later.
-
- Typically, the "code_challenge" and "code_challenge_method" values
- are stored in encrypted form in the "code" itself but could
- alternatively be stored on the server associated with the code. The
- server MUST NOT include the "code_challenge" value in client requests
- in a form that other entities can extract.
-
- The exact method that the server uses to associate the
- "code_challenge" with the issued "code" is out of scope for this
- specification.
-
-4.4.1. Error Response
-
- If the server requires Proof Key for Code Exchange (PKCE) by OAuth
- public clients and the client does not send the "code_challenge" in
- the request, the authorization endpoint MUST return the authorization
- error response with the "error" value set to "invalid_request". The
- "error_description" or the response of "error_uri" SHOULD explain the
- nature of error, e.g., code challenge required.
-
-
-
-
-
-
-Sakimura, et al. Standards Track [Page 9]
-
-RFC 7636 OAUTH PKCE September 2015
-
-
- If the server supporting PKCE does not support the requested
- transformation, the authorization endpoint MUST return the
- authorization error response with "error" value set to
- "invalid_request". The "error_description" or the response of
- "error_uri" SHOULD explain the nature of error, e.g., transform
- algorithm not supported.
-
-4.5. Client Sends the Authorization Code and the Code Verifier to the
- Token Endpoint
-
- Upon receipt of the Authorization Code, the client sends the Access
- Token Request to the token endpoint. In addition to the parameters
- defined in the OAuth 2.0 Access Token Request (Section 4.1.3 of
- [RFC6749]), it sends the following parameter:
-
- code_verifier
- REQUIRED. Code verifier
-
- The "code_challenge_method" is bound to the Authorization Code when
- the Authorization Code is issued. That is the method that the token
- endpoint MUST use to verify the "code_verifier".
-
-4.6. Server Verifies code_verifier before Returning the Tokens
-
- Upon receipt of the request at the token endpoint, the server
- verifies it by calculating the code challenge from the received
- "code_verifier" and comparing it with the previously associated
- "code_challenge", after first transforming it according to the
- "code_challenge_method" method specified by the client.
-
- If the "code_challenge_method" from Section 4.3 was "S256", the
- received "code_verifier" is hashed by SHA-256, base64url-encoded, and
- then compared to the "code_challenge", i.e.:
-
- BASE64URL-ENCODE(SHA256(ASCII(code_verifier))) == code_challenge
-
- If the "code_challenge_method" from Section 4.3 was "plain", they are
- compared directly, i.e.:
-
- code_verifier == code_challenge.
-
- If the values are equal, the token endpoint MUST continue processing
- as normal (as defined by OAuth 2.0 [RFC6749]). If the values are not
- equal, an error response indicating "invalid_grant" as described in
- Section 5.2 of [RFC6749] MUST be returned.
-
-
-
-
-
-
-Sakimura, et al. Standards Track [Page 10]
-
-RFC 7636 OAUTH PKCE September 2015
-
-
-5. Compatibility
-
- Server implementations of this specification MAY accept OAuth2.0
- clients that do not implement this extension. If the "code_verifier"
- is not received from the client in the Authorization Request, servers
- supporting backwards compatibility revert to the OAuth 2.0 [RFC6749]
- protocol without this extension.
-
- As the OAuth 2.0 [RFC6749] server responses are unchanged by this
- specification, client implementations of this specification do not
- need to know if the server has implemented this specification or not
- and SHOULD send the additional parameters as defined in Section 4 to
- all servers.
-
-6. IANA Considerations
-
- IANA has made the following registrations per this document.
-
-6.1. OAuth Parameters Registry
-
- This specification registers the following parameters in the IANA
- "OAuth Parameters" registry defined in OAuth 2.0 [RFC6749].
-
- o Parameter name: code_verifier
- o Parameter usage location: token request
- o Change controller: IESG
- o Specification document(s): RFC 7636 (this document)
-
- o Parameter name: code_challenge
- o Parameter usage location: authorization request
- o Change controller: IESG
- o Specification document(s): RFC 7636 (this document)
-
- o Parameter name: code_challenge_method
- o Parameter usage location: authorization request
- o Change controller: IESG
- o Specification document(s): RFC 7636 (this document)
-
-6.2. PKCE Code Challenge Method Registry
-
- This specification establishes the "PKCE Code Challenge Methods"
- registry. The new registry should be a sub-registry of the "OAuth
- Parameters" registry.
-
- Additional "code_challenge_method" types for use with the
- authorization endpoint are registered using the Specification
- Required policy [RFC5226], which includes review of the request by
- one or more Designated Experts (DEs). The DEs will ensure that there
-
-
-
-Sakimura, et al. Standards Track [Page 11]
-
-RFC 7636 OAUTH PKCE September 2015
-
-
- is at least a two-week review of the request on the oauth-ext-
- review@ietf.org mailing list and that any discussion on that list
- converges before they respond to the request. To allow for the
- allocation of values prior to publication, the Designated Expert(s)
- may approve registration once they are satisfied that an acceptable
- specification will be published.
-
- Registration requests and discussion on the oauth-ext-review@ietf.org
- mailing list should use an appropriate subject, such as "Request for
- PKCE code_challenge_method: example").
-
- The Designated Expert(s) should consider the discussion on the
- mailing list, as well as the overall security properties of the
- challenge method when evaluating registration requests. New methods
- should not disclose the value of the code_verifier in the request to
- the Authorization endpoint. Denials should include an explanation
- and, if applicable, suggestions as to how to make the request
- successful.
-
-6.2.1. Registration Template
-
- Code Challenge Method Parameter Name:
- The name requested (e.g., "example"). Because a core goal of this
- specification is for the resulting representations to be compact,
- it is RECOMMENDED that the name be short -- not to exceed 8
- characters without a compelling reason to do so. This name is
- case-sensitive. Names may not match other registered names in a
- case-insensitive manner unless the Designated Expert(s) states
- that there is a compelling reason to allow an exception in this
- particular case.
-
- Change Controller:
- For Standards Track RFCs, state "IESG". For others, give the name
- of the responsible party. Other details (e.g., postal address,
- email address, and home page URI) may also be included.
-
- Specification Document(s):
- Reference to the document(s) that specifies the parameter,
- preferably including URI(s) that can be used to retrieve copies of
- the document(s). An indication of the relevant sections may also
- be included but is not required.
-
-
-
-
-
-
-
-
-
-
-Sakimura, et al. Standards Track [Page 12]
-
-RFC 7636 OAUTH PKCE September 2015
-
-
-6.2.2. Initial Registry Contents
-
- Per this document, IANA has registered the Code Challenge Method
- Parameter Names defined in Section 4.2 in this registry.
-
- o Code Challenge Method Parameter Name: plain
- o Change Controller: IESG
- o Specification Document(s): Section 4.2 of RFC 7636 (this document)
-
- o Code Challenge Method Parameter Name: S256
- o Change Controller: IESG
- o Specification Document(s): Section 4.2 of RFC 7636 (this document)
-
-7. Security Considerations
-
-7.1. Entropy of the code_verifier
-
- The security model relies on the fact that the code verifier is not
- learned or guessed by the attacker. It is vitally important to
- adhere to this principle. As such, the code verifier has to be
- created in such a manner that it is cryptographically random and has
- high entropy that it is not practical for the attacker to guess.
-
- The client SHOULD create a "code_verifier" with a minimum of 256 bits
- of entropy. This can be done by having a suitable random number
- generator create a 32-octet sequence. The octet sequence can then be
- base64url-encoded to produce a 43-octet URL safe string to use as a
- "code_challenge" that has the required entropy.
-
-7.2. Protection against Eavesdroppers
-
- Clients MUST NOT downgrade to "plain" after trying the "S256" method.
- Servers that support PKCE are required to support "S256", and servers
- that do not support PKCE will simply ignore the unknown
- "code_verifier". Because of this, an error when "S256" is presented
- can only mean that the server is faulty or that a MITM attacker is
- trying a downgrade attack.
-
- The "S256" method protects against eavesdroppers observing or
- intercepting the "code_challenge", because the challenge cannot be
- used without the verifier. With the "plain" method, there is a
- chance that "code_challenge" will be observed by the attacker on the
- device or in the http request. Since the code challenge is the same
- as the code verifier in this case, the "plain" method does not
- protect against the eavesdropping of the initial request.
-
- The use of "S256" protects against disclosure of the "code_verifier"
- value to an attacker.
-
-
-
-Sakimura, et al. Standards Track [Page 13]
-
-RFC 7636 OAUTH PKCE September 2015
-
-
- Because of this, "plain" SHOULD NOT be used and exists only for
- compatibility with deployed implementations where the request path is
- already protected. The "plain" method SHOULD NOT be used in new
- implementations, unless they cannot support "S256" for some technical
- reason.
-
- The "S256" code challenge method or other cryptographically secure
- code challenge method extension SHOULD be used. The "plain" code
- challenge method relies on the operating system and transport
- security not to disclose the request to an attacker.
-
- If the code challenge method is "plain" and the code challenge is to
- be returned inside authorization "code" to achieve a stateless
- server, it MUST be encrypted in such a manner that only the server
- can decrypt and extract it.
-
-7.3. Salting the code_challenge
-
- To reduce implementation complexity, salting is not used in the
- production of the code challenge, as the code verifier contains
- sufficient entropy to prevent brute-force attacks. Concatenating a
- publicly known value to a code verifier (containing 256 bits of
- entropy) and then hashing it with SHA256 to produce a code challenge
- would not increase the number of attempts necessary to brute force a
- valid value for code verifier.
-
- While the "S256" transformation is like hashing a password, there are
- important differences. Passwords tend to be relatively low-entropy
- words that can be hashed offline and the hash looked up in a
- dictionary. By concatenating a unique though public value to each
- password prior to hashing, the dictionary space that an attacker
- needs to search is greatly expanded.
-
- Modern graphics processors now allow attackers to calculate hashes in
- real time faster than they could be looked up from a disk. This
- eliminates the value of the salt in increasing the complexity of a
- brute-force attack for even low-entropy passwords.
-
-7.4. OAuth Security Considerations
-
- All the OAuth security analysis presented in [RFC6819] applies, so
- readers SHOULD carefully follow it.
-
-
-
-
-
-
-
-
-
-Sakimura, et al. Standards Track [Page 14]
-
-RFC 7636 OAUTH PKCE September 2015
-
-
-7.5. TLS Security Considerations
-
- Current security considerations can be found in "Recommendations for
- Secure Use of Transport Layer Security (TLS) and Datagram Transport
- Layer Security (DTLS)" [BCP195]. This supersedes the TLS version
- recommendations in OAuth 2.0 [RFC6749].
-
-8. References
-
-8.1. Normative References
-
- [BCP195] Sheffer, Y., Holz, R., and P. Saint-Andre,
- "Recommendations for Secure Use of Transport Layer
- Security (TLS) and Datagram Transport Layer Security
- (DTLS)", BCP 195, RFC 7525, May 2015,
- .
-
- [RFC20] Cerf, V., "ASCII format for network interchange", STD 80,
- RFC 20, DOI 10.17487/RFC0020, October 1969,
- .
-
- [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
- Requirement Levels", BCP 14, RFC 2119,
- DOI 10.17487/RFC2119, March 1997,
- .
-
- [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform
- Resource Identifier (URI): Generic Syntax", STD 66, RFC
- 3986, DOI 10.17487/RFC3986, January 2005,
- .
-
- [RFC4648] Josefsson, S., "The Base16, Base32, and Base64 Data
- Encodings", RFC 4648, DOI 10.17487/RFC4648, October 2006,
- .
-
- [RFC5226] Narten, T. and H. Alvestrand, "Guidelines for Writing an
- IANA Considerations Section in RFCs", BCP 26, RFC 5226,
- DOI 10.17487/RFC5226, May 2008,
- .
-
- [RFC5234] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax
- Specifications: ABNF", STD 68, RFC 5234,
- DOI 10.17487/RFC5234, January 2008,
- .
-
-
-
-
-
-
-
-Sakimura, et al. Standards Track [Page 15]
-
-RFC 7636 OAUTH PKCE September 2015
-
-
- [RFC6234] Eastlake 3rd, D. and T. Hansen, "US Secure Hash Algorithms
- (SHA and SHA-based HMAC and HKDF)", RFC 6234,
- DOI 10.17487/RFC6234, May 2011,
- .
-
- [RFC6749] Hardt, D., Ed., "The OAuth 2.0 Authorization Framework",
- RFC 6749, DOI 10.17487/RFC6749, October 2012,
- .
-
-8.2. Informative References
-
- [RFC6819] Lodderstedt, T., Ed., McGloin, M., and P. Hunt, "OAuth 2.0
- Threat Model and Security Considerations", RFC 6819,
- DOI 10.17487/RFC6819, January 2013,
- .
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Sakimura, et al. Standards Track [Page 16]
-
-RFC 7636 OAUTH PKCE September 2015
-
-
-Appendix A. Notes on Implementing Base64url Encoding without Padding
-
- This appendix describes how to implement a base64url-encoding
- function without padding, based upon the standard base64-encoding
- function that uses padding.
-
- To be concrete, example C# code implementing these functions is shown
- below. Similar code could be used in other languages.
-
- static string base64urlencode(byte [] arg)
- {
- string s = Convert.ToBase64String(arg); // Regular base64 encoder
- s = s.Split('=')[0]; // Remove any trailing '='s
- s = s.Replace('+', '-'); // 62nd char of encoding
- s = s.Replace('/', '_'); // 63rd char of encoding
- return s;
- }
-
- An example correspondence between unencoded and encoded values
- follows. The octet sequence below encodes into the string below,
- which when decoded, reproduces the octet sequence.
-
- 3 236 255 224 193
-
- A-z_4ME
-
-Appendix B. Example for the S256 code_challenge_method
-
- The client uses output of a suitable random number generator to
- create a 32-octet sequence. The octets representing the value in
- this example (using JSON array notation) are:
-
- [116, 24, 223, 180, 151, 153, 224, 37, 79, 250, 96, 125, 216, 173,
- 187, 186, 22, 212, 37, 77, 105, 214, 191, 240, 91, 88, 5, 88, 83,
- 132, 141, 121]
-
- Encoding this octet sequence as base64url provides the value of the
- code_verifier:
-
- dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk
-
- The code_verifier is then hashed via the SHA256 hash function to
- produce:
-
- [19, 211, 30, 150, 26, 26, 216, 236, 47, 22, 177, 12, 76, 152, 46,
- 8, 118, 168, 120, 173, 109, 241, 68, 86, 110, 225, 137, 74, 203,
- 112, 249, 195]
-
-
-
-
-Sakimura, et al. Standards Track [Page 17]
-
-RFC 7636 OAUTH PKCE September 2015
-
-
- Encoding this octet sequence as base64url provides the value of the
- code_challenge:
-
- E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM
-
- The authorization request includes:
-
- code_challenge=E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM
- &code_challenge_method=S256
-
- The authorization server then records the code_challenge and
- code_challenge_method along with the code that is granted to the
- client.
-
- In the request to the token_endpoint, the client includes the code
- received in the authorization response as well as the additional
- parameter:
-
- code_verifier=dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk
-
- The authorization server retrieves the information for the code
- grant. Based on the recorded code_challenge_method being S256, it
- then hashes and base64url-encodes the value of code_verifier:
-
- BASE64URL-ENCODE(SHA256(ASCII(code_verifier)))
-
- The calculated value is then compared with the value of
- "code_challenge":
-
- BASE64URL-ENCODE(SHA256(ASCII(code_verifier))) == code_challenge
-
- If the two values are equal, then the authorization server can
- provide the tokens as long as there are no other errors in the
- request. If the values are not equal, then the request must be
- rejected, and an error returned.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Sakimura, et al. Standards Track [Page 18]
-
-RFC 7636 OAUTH PKCE September 2015
-
-
-Acknowledgements
-
- The initial draft version of this specification was created by the
- OpenID AB/Connect Working Group of the OpenID Foundation.
-
- This specification is the work of the OAuth Working Group, which
- includes dozens of active and dedicated participants. In particular,
- the following individuals contributed ideas, feedback, and wording
- that shaped and formed the final specification:
-
- Anthony Nadalin, Microsoft
- Axel Nenker, Deutsche Telekom
- Breno de Medeiros, Google
- Brian Campbell, Ping Identity
- Chuck Mortimore, Salesforce
- Dirk Balfanz, Google
- Eduardo Gueiros, Jive Communications
- Hannes Tschonfenig, ARM
- James Manger, Telstra
- Justin Richer, MIT Kerberos
- Josh Mandel, Boston Children's Hospital
- Lewis Adam, Motorola Solutions
- Madjid Nakhjiri, Samsung
- Michael B. Jones, Microsoft
- Paul Madsen, Ping Identity
- Phil Hunt, Oracle
- Prateek Mishra, Oracle
- Ryo Ito, mixi
- Scott Tomilson, Ping Identity
- Sergey Beryozkin
- Takamichi Saito
- Torsten Lodderstedt, Deutsche Telekom
- William Denniss, Google
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Sakimura, et al. Standards Track [Page 19]
-
-RFC 7636 OAUTH PKCE September 2015
-
-
-Authors' Addresses
-
- Nat Sakimura (editor)
- Nomura Research Institute
- 1-6-5 Marunouchi, Marunouchi Kitaguchi Bldg.
- Chiyoda-ku, Tokyo 100-0005
- Japan
-
- Phone: +81-3-5533-2111
- Email: n-sakimura@nri.co.jp
- URI: http://nat.sakimura.org/
-
-
- John Bradley
- Ping Identity
- Casilla 177, Sucursal Talagante
- Talagante, RM
- Chile
-
- Phone: +44 20 8133 3718
- Email: ve7jtb@ve7jtb.com
- URI: http://www.thread-safe.com/
-
-
- Naveen Agarwal
- Google
- 1600 Amphitheatre Parkway
- Mountain View, CA 94043
- United States
-
- Phone: +1 650-253-0000
- Email: naa@google.com
- URI: http://google.com/
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Sakimura, et al. Standards Track [Page 20]
-
diff --git a/specifications/calendar/rfc5545.txt b/specifications/calendar/rfc5545.txt
deleted file mode 100644
index 47ea31d6..00000000
--- a/specifications/calendar/rfc5545.txt
+++ /dev/null
@@ -1,9411 +0,0 @@
-
-
-
-
-
-
-Network Working Group B. Desruisseaux, Ed.
-Request for Comments: 5545 Oracle
-Obsoletes: 2445 September 2009
-Category: Standards Track
-
-
- Internet Calendaring and Scheduling Core Object Specification
- (iCalendar)
-
-Abstract
-
-This document defines the iCalendar data format for representing and
-exchanging calendaring and scheduling information such as events,
-to-dos, journal entries, and free/busy information, independent of any
-particular calendar service or protocol.
-
-Status of This Memo
-
- This document specifies an Internet standards track protocol for the
- Internet community, and requests discussion and suggestions for
- improvements. Please refer to the current edition of the "Internet
- Official Protocol Standards" (STD 1) for the standardization state
- and status of this protocol. Distribution of this memo is unlimited.
-
-Copyright and License Notice
-
- Copyright (c) 2009 IETF Trust and the persons identified as the
- document authors. All rights reserved.
-
- This document is subject to BCP 78 and the IETF Trust's Legal
- Provisions Relating to IETF Documents
- (http://trustee.ietf.org/license-info) in effect on the date of
- publication of this document. Please review these documents
- carefully, as they describe your rights and restrictions with respect
- to this document. Code Components extracted from this document must
- include Simplified BSD License text as described in Section 4.e of
- the Trust Legal Provisions and are provided without warranty as
- described in the BSD License.
-
- This document may contain material from IETF Documents or IETF
- Contributions published or made publicly available before November
- 10, 2008. The person(s) controlling the copyright in some of this
- material may not have granted the IETF Trust the right to allow
- modifications of such material outside the IETF Standards Process.
- Without obtaining an adequate license from the person(s) controlling
- the copyright in such materials, this document may not be modified
- outside the IETF Standards Process, and derivative works of it may
- not be created outside the IETF Standards Process, except to format
-
-
-
-Desruisseaux Standards Track [Page 1]
-
-RFC 5545 iCalendar September 2009
-
-
- it for publication as an RFC or to translate it into languages other
- than English.
-
-Table of Contents
-
- 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 5
- 2. Basic Grammar and Conventions . . . . . . . . . . . . . . . . 6
- 2.1. Formatting Conventions . . . . . . . . . . . . . . . . . 6
- 2.2. Related Memos . . . . . . . . . . . . . . . . . . . . . . 7
- 3. iCalendar Object Specification . . . . . . . . . . . . . . . 8
- 3.1. Content Lines . . . . . . . . . . . . . . . . . . . . . . 8
- 3.1.1. List and Field Separators . . . . . . . . . . . . . . 11
- 3.1.2. Multiple Values . . . . . . . . . . . . . . . . . . . 11
- 3.1.3. Binary Content . . . . . . . . . . . . . . . . . . . 11
- 3.1.4. Character Set . . . . . . . . . . . . . . . . . . . . 12
- 3.2. Property Parameters . . . . . . . . . . . . . . . . . . . 12
- 3.2.1. Alternate Text Representation . . . . . . . . . . . . 13
- 3.2.2. Common Name . . . . . . . . . . . . . . . . . . . . . 15
- 3.2.3. Calendar User Type . . . . . . . . . . . . . . . . . 15
- 3.2.4. Delegators . . . . . . . . . . . . . . . . . . . . . 16
- 3.2.5. Delegatees . . . . . . . . . . . . . . . . . . . . . 16
- 3.2.6. Directory Entry Reference . . . . . . . . . . . . . . 17
- 3.2.7. Inline Encoding . . . . . . . . . . . . . . . . . . . 17
- 3.2.8. Format Type . . . . . . . . . . . . . . . . . . . . . 18
- 3.2.9. Free/Busy Time Type . . . . . . . . . . . . . . . . . 19
- 3.2.10. Language . . . . . . . . . . . . . . . . . . . . . . 20
- 3.2.11. Group or List Membership . . . . . . . . . . . . . . 20
- 3.2.12. Participation Status . . . . . . . . . . . . . . . . 21
- 3.2.13. Recurrence Identifier Range . . . . . . . . . . . . . 22
- 3.2.14. Alarm Trigger Relationship . . . . . . . . . . . . . 23
- 3.2.15. Relationship Type . . . . . . . . . . . . . . . . . . 24
- 3.2.16. Participation Role . . . . . . . . . . . . . . . . . 25
- 3.2.17. RSVP Expectation . . . . . . . . . . . . . . . . . . 25
- 3.2.18. Sent By . . . . . . . . . . . . . . . . . . . . . . . 26
- 3.2.19. Time Zone Identifier . . . . . . . . . . . . . . . . 26
- 3.2.20. Value Data Types . . . . . . . . . . . . . . . . . . 28
- 3.3. Property Value Data Types . . . . . . . . . . . . . . . . 29
- 3.3.1. Binary . . . . . . . . . . . . . . . . . . . . . . . 29
- 3.3.2. Boolean . . . . . . . . . . . . . . . . . . . . . . . 30
- 3.3.3. Calendar User Address . . . . . . . . . . . . . . . . 30
- 3.3.4. Date . . . . . . . . . . . . . . . . . . . . . . . . 31
- 3.3.5. Date-Time . . . . . . . . . . . . . . . . . . . . . . 31
- 3.3.6. Duration . . . . . . . . . . . . . . . . . . . . . . 34
- 3.3.7. Float . . . . . . . . . . . . . . . . . . . . . . . . 35
- 3.3.8. Integer . . . . . . . . . . . . . . . . . . . . . . . 35
- 3.3.9. Period of Time . . . . . . . . . . . . . . . . . . . 36
- 3.3.10. Recurrence Rule . . . . . . . . . . . . . . . . . . . 37
- 3.3.11. Text . . . . . . . . . . . . . . . . . . . . . . . . 45
-
-
-
-Desruisseaux Standards Track [Page 2]
-
-RFC 5545 iCalendar September 2009
-
-
- 3.3.12. Time . . . . . . . . . . . . . . . . . . . . . . . . 46
- 3.3.13. URI . . . . . . . . . . . . . . . . . . . . . . . . . 48
- 3.3.14. UTC Offset . . . . . . . . . . . . . . . . . . . . . 49
- 3.4. iCalendar Object . . . . . . . . . . . . . . . . . . . . 49
- 3.5. Property . . . . . . . . . . . . . . . . . . . . . . . . 50
- 3.6. Calendar Components . . . . . . . . . . . . . . . . . . . 50
- 3.6.1. Event Component . . . . . . . . . . . . . . . . . . . 52
- 3.6.2. To-Do Component . . . . . . . . . . . . . . . . . . . 56
- 3.6.3. Journal Component . . . . . . . . . . . . . . . . . . 58
- 3.6.4. Free/Busy Component . . . . . . . . . . . . . . . . . 60
- 3.6.5. Time Zone Component . . . . . . . . . . . . . . . . . 63
- 3.6.6. Alarm Component . . . . . . . . . . . . . . . . . . . 72
- 3.7. Calendar Properties . . . . . . . . . . . . . . . . . . . 77
- 3.7.1. Calendar Scale . . . . . . . . . . . . . . . . . . . 77
- 3.7.2. Method . . . . . . . . . . . . . . . . . . . . . . . 78
- 3.7.3. Product Identifier . . . . . . . . . . . . . . . . . 79
- 3.7.4. Version . . . . . . . . . . . . . . . . . . . . . . . 80
- 3.8. Component Properties . . . . . . . . . . . . . . . . . . 81
- 3.8.1. Descriptive Component Properties . . . . . . . . . . 81
- 3.8.1.1. Attachment . . . . . . . . . . . . . . . . . . . 81
- 3.8.1.2. Categories . . . . . . . . . . . . . . . . . . . 82
- 3.8.1.3. Classification . . . . . . . . . . . . . . . . . 83
- 3.8.1.4. Comment . . . . . . . . . . . . . . . . . . . . . 84
- 3.8.1.5. Description . . . . . . . . . . . . . . . . . . . 85
- 3.8.1.6. Geographic Position . . . . . . . . . . . . . . . 87
- 3.8.1.7. Location . . . . . . . . . . . . . . . . . . . . 88
- 3.8.1.8. Percent Complete . . . . . . . . . . . . . . . . 89
- 3.8.1.9. Priority . . . . . . . . . . . . . . . . . . . . 90
- 3.8.1.10. Resources . . . . . . . . . . . . . . . . . . . . 92
- 3.8.1.11. Status . . . . . . . . . . . . . . . . . . . . . 93
- 3.8.1.12. Summary . . . . . . . . . . . . . . . . . . . . . 94
- 3.8.2. Date and Time Component Properties . . . . . . . . . 95
- 3.8.2.1. Date-Time Completed . . . . . . . . . . . . . . . 95
- 3.8.2.2. Date-Time End . . . . . . . . . . . . . . . . . . 96
- 3.8.2.3. Date-Time Due . . . . . . . . . . . . . . . . . . 97
- 3.8.2.4. Date-Time Start . . . . . . . . . . . . . . . . . 99
- 3.8.2.5. Duration . . . . . . . . . . . . . . . . . . . . 100
- 3.8.2.6. Free/Busy Time . . . . . . . . . . . . . . . . . 101
- 3.8.2.7. Time Transparency . . . . . . . . . . . . . . . . 102
- 3.8.3. Time Zone Component Properties . . . . . . . . . . . 103
- 3.8.3.1. Time Zone Identifier . . . . . . . . . . . . . . 103
- 3.8.3.2. Time Zone Name . . . . . . . . . . . . . . . . . 105
- 3.8.3.3. Time Zone Offset From . . . . . . . . . . . . . . 106
- 3.8.3.4. Time Zone Offset To . . . . . . . . . . . . . . . 106
- 3.8.3.5. Time Zone URL . . . . . . . . . . . . . . . . . . 107
- 3.8.4. Relationship Component Properties . . . . . . . . . . 108
- 3.8.4.1. Attendee . . . . . . . . . . . . . . . . . . . . 108
- 3.8.4.2. Contact . . . . . . . . . . . . . . . . . . . . . 111
-
-
-
-Desruisseaux Standards Track [Page 3]
-
-RFC 5545 iCalendar September 2009
-
-
- 3.8.4.3. Organizer . . . . . . . . . . . . . . . . . . . . 113
- 3.8.4.4. Recurrence ID . . . . . . . . . . . . . . . . . . 114
- 3.8.4.5. Related To . . . . . . . . . . . . . . . . . . . 117
- 3.8.4.6. Uniform Resource Locator . . . . . . . . . . . . 118
- 3.8.4.7. Unique Identifier . . . . . . . . . . . . . . . . 119
- 3.8.5. Recurrence Component Properties . . . . . . . . . . . 120
- 3.8.5.1. Exception Date-Times . . . . . . . . . . . . . . 120
- 3.8.5.2. Recurrence Date-Times . . . . . . . . . . . . . . 122
- 3.8.5.3. Recurrence Rule . . . . . . . . . . . . . . . . . 124
- 3.8.6. Alarm Component Properties . . . . . . . . . . . . . 134
- 3.8.6.1. Action . . . . . . . . . . . . . . . . . . . . . 134
- 3.8.6.2. Repeat Count . . . . . . . . . . . . . . . . . . 135
- 3.8.6.3. Trigger . . . . . . . . . . . . . . . . . . . . . 135
- 3.8.7. Change Management Component Properties . . . . . . . 138
- 3.8.7.1. Date-Time Created . . . . . . . . . . . . . . . . 138
- 3.8.7.2. Date-Time Stamp . . . . . . . . . . . . . . . . . 139
- 3.8.7.3. Last Modified . . . . . . . . . . . . . . . . . . 140
- 3.8.7.4. Sequence Number . . . . . . . . . . . . . . . . . 141
- 3.8.8. Miscellaneous Component Properties . . . . . . . . . 142
- 3.8.8.1. IANA Properties . . . . . . . . . . . . . . . . . 142
- 3.8.8.2. Non-Standard Properties . . . . . . . . . . . . . 142
- 3.8.8.3. Request Status . . . . . . . . . . . . . . . . . 144
- 4. iCalendar Object Examples . . . . . . . . . . . . . . . . . . 146
- 5. Recommended Practices . . . . . . . . . . . . . . . . . . . . 150
- 6. Internationalization Considerations . . . . . . . . . . . . . 151
- 7. Security Considerations . . . . . . . . . . . . . . . . . . . 151
- 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 151
- 8.1. iCalendar Media Type Registration . . . . . . . . . . . . 151
- 8.2. New iCalendar Elements Registration . . . . . . . . . . . 155
- 8.2.1. iCalendar Elements Registration Procedure . . . . . . 155
- 8.2.2. Registration Template for Components . . . . . . . . 155
- 8.2.3. Registration Template for Properties . . . . . . . . 156
- 8.2.4. Registration Template for Parameters . . . . . . . . 156
- 8.2.5. Registration Template for Value Data Types . . . . . 157
- 8.2.6. Registration Template for Values . . . . . . . . . . 157
- 8.3. Initial iCalendar Elements Registries . . . . . . . . . . 158
- 8.3.1. Components Registry . . . . . . . . . . . . . . . . . 158
- 8.3.2. Properties Registry . . . . . . . . . . . . . . . . . 158
- 8.3.3. Parameters Registry . . . . . . . . . . . . . . . . . 161
- 8.3.4. Value Data Types Registry . . . . . . . . . . . . . . 162
- 8.3.5. Calendar User Types Registry . . . . . . . . . . . . 162
- 8.3.6. Free/Busy Time Types Registry . . . . . . . . . . . . 163
- 8.3.7. Participation Statuses Registry . . . . . . . . . . . 163
- 8.3.8. Relationship Types Registry . . . . . . . . . . . . . 164
- 8.3.9. Participation Roles Registry . . . . . . . . . . . . 164
- 8.3.10. Actions Registry . . . . . . . . . . . . . . . . . . 165
- 8.3.11. Classifications Registry . . . . . . . . . . . . . . 165
- 8.3.12. Methods Registry . . . . . . . . . . . . . . . . . . 165
-
-
-
-Desruisseaux Standards Track [Page 4]
-
-RFC 5545 iCalendar September 2009
-
-
- 9. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 165
- 10. References . . . . . . . . . . . . . . . . . . . . . . . . . 166
- 10.1. Normative References . . . . . . . . . . . . . . . . . . 166
- 10.2. Informative References . . . . . . . . . . . . . . . . . 167
- Appendix A. Differences from RFC 2445 . . . . . . . . . . . . . 169
- A.1. New Restrictions . . . . . . . . . . . . . . . . . . . . 169
- A.2. Restrictions Removed . . . . . . . . . . . . . . . . . . 169
- A.3. Deprecated Features . . . . . . . . . . . . . . . . . . . 169
-
-1. Introduction
-
- The use of calendaring and scheduling has grown considerably in the
- last decade. Enterprise and inter-enterprise business has become
- dependent on rapid scheduling of events and actions using this
- information technology. This memo is intended to progress the level
- of interoperability possible between dissimilar calendaring and
- scheduling applications. This memo defines a MIME content type for
- exchanging electronic calendaring and scheduling information. The
- Internet Calendaring and Scheduling Core Object Specification, or
- iCalendar, allows for the capture and exchange of information
- normally stored within a calendaring and scheduling application; such
- as a Personal Information Manager (PIM) or a Group-Scheduling
- product.
-
- The iCalendar format is suitable as an exchange format between
- applications or systems. The format is defined in terms of a MIME
- content type. This will enable the object to be exchanged using
- several transports, including but not limited to SMTP, HTTP, a file
- system, desktop interactive protocols such as the use of a memory-
- based clipboard or drag/drop interactions, point-to-point
- asynchronous communication, wired-network transport, or some form of
- unwired transport such as infrared.
-
- The memo also provides for the definition of iCalendar object methods
- that will map this content type to a set of messages for supporting
- calendaring and scheduling operations such as requesting, replying
- to, modifying, and canceling meetings or appointments, to-dos, and
- journal entries. The iCalendar object methods can be used to define
- other calendaring and scheduling operations such as requesting for
- and replying with free/busy time data. Such a scheduling protocol is
- defined in the iCalendar Transport-independent Interoperability
- Protocol (iTIP) defined in [2446bis].
-
- The memo also includes a formal grammar for the content type based on
- the Internet ABNF defined in [RFC5234]. This ABNF is required for
- the implementation of parsers and to serve as the definitive
- reference when ambiguities or questions arise in interpreting the
- descriptive prose definition of the memo. Additional restrictions
-
-
-
-Desruisseaux Standards Track [Page 5]
-
-RFC 5545 iCalendar September 2009
-
-
- that could not easily be expressed with the ABNF syntax are specified
- as comments in the ABNF. Comments with normative statements should
- be treated as such.
-
-2. Basic Grammar and Conventions
-
- The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
- "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
- document are to be interpreted as described in [RFC2119].
-
- This memo makes use of both a descriptive prose and a more formal
- notation for defining the calendaring and scheduling format.
-
- The notation used in this memo is the ABNF notation of [RFC5234].
- Readers intending on implementing the format defined in this memo
- should be familiar with this notation in order to properly interpret
- the specifications of this memo.
-
- All numeric values used in this memo are given in decimal notation.
-
- All names of properties, property parameters, enumerated property
- values, and property parameter values are case-insensitive. However,
- all other property values are case-sensitive, unless otherwise
- stated.
-
- Note: All indented editorial notes, such as this one, are intended
- to provide the reader with additional information. The
- information is not essential to the building of an implementation
- conformant with this memo. The information is provided to
- highlight a particular feature or characteristic of the memo.
-
- The format for the iCalendar object is based on the syntax of the
- text/directory media type [RFC2425]. While the iCalendar object is
- not a profile of the text/directory media type [RFC2425], it does
- reuse a number of the elements from the [RFC2425] specification.
-
-2.1. Formatting Conventions
-
- The elements defined in this memo are defined in prose. Many of the
- terms used to describe these have common usage that is different than
- the standards usage of this memo. In order to reference, within this
- memo, elements of the calendaring and scheduling model, core object
- (this memo), or interoperability protocol [2446bis] some formatting
- conventions have been used. Calendaring and scheduling roles are
- referred to in quoted-strings of text with the first character of
- each word in uppercase. For example, "Organizer" refers to a role of
- a "Calendar User" within the scheduling protocol defined by
- [2446bis]. Calendar components defined by this memo are referred to
-
-
-
-Desruisseaux Standards Track [Page 6]
-
-RFC 5545 iCalendar September 2009
-
-
- with capitalized, quoted-strings of text. All calendar components
- start with the letter "V". For example, "VEVENT" refers to the event
- calendar component, "VTODO" refers to the to-do calendar component,
- and "VJOURNAL" refers to the daily journal calendar component.
- Scheduling methods defined by iTIP [2446bis] are referred to with
- capitalized, quoted-strings of text. For example, "REQUEST" refers
- to the method for requesting a scheduling calendar component be
- created or modified, and "REPLY" refers to the method a recipient of
- a request uses to update their status with the "Organizer" of the
- calendar component.
-
- The properties defined by this memo are referred to with capitalized,
- quoted-strings of text, followed by the word "property". For
- example, "ATTENDEE" property refers to the iCalendar property used to
- convey the calendar address of a calendar user. Property parameters
- defined by this memo are referred to with lowercase, quoted-strings
- of text, followed by the word "parameter". For example, "value"
- parameter refers to the iCalendar property parameter used to override
- the default value type for a property value. Enumerated values
- defined by this memo are referred to with capitalized text, either
- alone or followed by the word "value". For example, the "MINUTELY"
- value can be used with the "FREQ" component of the "RECUR" value type
- to specify repeating components based on an interval of one minute or
- more.
-
- The following table lists the different characters from the
- [US-ASCII] character set that is referenced in this document. For
- each character, the table specifies the character name used
- throughout this document, along with its US-ASCII decimal codepoint.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Desruisseaux Standards Track [Page 7]
-
-RFC 5545 iCalendar September 2009
-
-
- +------------------------+-------------------+
- | Character name | Decimal codepoint |
- +------------------------+-------------------+
- | HTAB | 9 |
- | LF | 10 |
- | CR | 13 |
- | DQUOTE | 22 |
- | SPACE | 32 |
- | PLUS SIGN | 43 |
- | COMMA | 44 |
- | HYPHEN-MINUS | 45 |
- | PERIOD | 46 |
- | SOLIDUS | 47 |
- | COLON | 58 |
- | SEMICOLON | 59 |
- | LATIN CAPITAL LETTER N | 78 |
- | LATIN CAPITAL LETTER T | 84 |
- | LATIN CAPITAL LETTER X | 88 |
- | LATIN CAPITAL LETTER Z | 90 |
- | BACKSLASH | 92 |
- | LATIN SMALL LETTER N | 110 |
- +------------------------+-------------------+
-
-2.2. Related Memos
-
- Implementers will need to be familiar with several other memos that,
- along with this memo, form a framework for Internet calendaring and
- scheduling standards. This memo specifies a core specification of
- objects, value types, properties, and property parameters.
-
- o iTIP [2446bis] specifies an interoperability protocol for
- scheduling between different implementations;
-
- o iCalendar Message-Based Interoperability Protocol (iMIP) [2447bis]
- specifies an Internet email binding for [2446bis].
-
- This memo does not attempt to repeat the specification of concepts or
- definitions from these other memos. Where possible, references are
- made to the memo that provides for the specification of these
- concepts or definitions.
-
-3. iCalendar Object Specification
-
- The following sections define the details of a Calendaring and
- Scheduling Core Object Specification. The Calendaring and Scheduling
- Core Object is a collection of calendaring and scheduling
- information. Typically, this information will consist of an
- iCalendar stream with one or more iCalendar objects. The body of the
-
-
-
-Desruisseaux Standards Track [Page 8]
-
-RFC 5545 iCalendar September 2009
-
-
- iCalendar object consists of a sequence of calendar properties and
- one or more calendar components.
-
- Section 3.1 defines the content line format; Section 3.2 defines the
- property parameter format; Section 3.3 defines the data types for
- property values; Section 3.4 defines the iCalendar object format;
- Section 3.5 defines the iCalendar property format; Section 3.6
- defines the calendar component format; Section 3.7 defines calendar
- properties; and Section 3.8 defines calendar component properties.
-
- This information is intended to be an integral part of the MIME
- content type registration. In addition, this information can be used
- independent of such content registration. In particular, this memo
- has direct applicability for use as a calendaring and scheduling
- exchange format in file-, memory-, or network-based transport
- mechanisms.
-
-3.1. Content Lines
-
- The iCalendar object is organized into individual lines of text,
- called content lines. Content lines are delimited by a line break,
- which is a CRLF sequence (CR character followed by LF character).
-
- Lines of text SHOULD NOT be longer than 75 octets, excluding the line
- break. Long content lines SHOULD be split into a multiple line
- representations using a line "folding" technique. That is, a long
- line can be split between any two characters by inserting a CRLF
- immediately followed by a single linear white-space character (i.e.,
- SPACE or HTAB). Any sequence of CRLF followed immediately by a
- single linear white-space character is ignored (i.e., removed) when
- processing the content type.
-
- For example, the line:
-
- DESCRIPTION:This is a long description that exists on a long line.
-
- Can be represented as:
-
- DESCRIPTION:This is a lo
- ng description
- that exists on a long line.
-
- The process of moving from this folded multiple-line representation
- to its single-line representation is called "unfolding". Unfolding
- is accomplished by removing the CRLF and the linear white-space
- character that immediately follows.
-
-
-
-
-
-Desruisseaux Standards Track [Page 9]
-
-RFC 5545 iCalendar September 2009
-
-
- When parsing a content line, folded lines MUST first be unfolded
- according to the unfolding procedure described above.
-
- Note: It is possible for very simple implementations to generate
- improperly folded lines in the middle of a UTF-8 multi-octet
- sequence. For this reason, implementations need to unfold lines
- in such a way to properly restore the original sequence.
-
- The content information associated with an iCalendar object is
- formatted using a syntax similar to that defined by [RFC2425]. That
- is, the content information consists of CRLF-separated content lines.
-
- The following notation defines the lines of content in an iCalendar
- object:
-
- contentline = name *(";" param ) ":" value CRLF
- ; This ABNF is just a general definition for an initial parsing
- ; of the content line into its property name, parameter list,
- ; and value string
-
- ; When parsing a content line, folded lines MUST first
- ; be unfolded according to the unfolding procedure
- ; described above. When generating a content line, lines
- ; longer than 75 octets SHOULD be folded according to
- ; the folding procedure described above.
-
- name = iana-token / x-name
-
- iana-token = 1*(ALPHA / DIGIT / "-")
- ; iCalendar identifier registered with IANA
-
- x-name = "X-" [vendorid "-"] 1*(ALPHA / DIGIT / "-")
- ; Reserved for experimental use.
-
- vendorid = 3*(ALPHA / DIGIT)
- ; Vendor identification
-
- param = param-name "=" param-value *("," param-value)
- ; Each property defines the specific ABNF for the parameters
- ; allowed on the property. Refer to specific properties for
- ; precise parameter ABNF.
-
- param-name = iana-token / x-name
-
- param-value = paramtext / quoted-string
-
- paramtext = *SAFE-CHAR
-
-
-
-
-Desruisseaux Standards Track [Page 10]
-
-RFC 5545 iCalendar September 2009
-
-
- value = *VALUE-CHAR
-
- quoted-string = DQUOTE *QSAFE-CHAR DQUOTE
-
- QSAFE-CHAR = WSP / %x21 / %x23-7E / NON-US-ASCII
- ; Any character except CONTROL and DQUOTE
-
- SAFE-CHAR = WSP / %x21 / %x23-2B / %x2D-39 / %x3C-7E
- / NON-US-ASCII
- ; Any character except CONTROL, DQUOTE, ";", ":", ","
-
- VALUE-CHAR = WSP / %x21-7E / NON-US-ASCII
- ; Any textual character
-
- NON-US-ASCII = UTF8-2 / UTF8-3 / UTF8-4
- ; UTF8-2, UTF8-3, and UTF8-4 are defined in [RFC3629]
-
- CONTROL = %x00-08 / %x0A-1F / %x7F
- ; All the controls except HTAB
-
- The property value component of a content line has a format that is
- property specific. Refer to the section describing each property for
- a definition of this format.
-
- All names of properties, property parameters, enumerated property
- values and property parameter values are case-insensitive. However,
- all other property values are case-sensitive, unless otherwise
- stated.
-
-3.1.1. List and Field Separators
-
- Some properties and parameters allow a list of values. Values in a
- list of values MUST be separated by a COMMA character. There is no
- significance to the order of values in a list. For those parameter
- values (such as those that specify URI values) that are specified in
- quoted-strings, the individual quoted-strings are separated by a
- COMMA character.
-
- Some property values are defined in terms of multiple parts. These
- structured property values MUST have their value parts separated by a
- SEMICOLON character.
-
- Some properties allow a list of parameters. Each property parameter
- in a list of property parameters MUST be separated by a SEMICOLON
- character.
-
-
-
-
-
-
-Desruisseaux Standards Track [Page 11]
-
-RFC 5545 iCalendar September 2009
-
-
- Property parameters with values containing a COLON character, a
- SEMICOLON character or a COMMA character MUST be placed in quoted
- text.
-
- For example, in the following properties, a SEMICOLON is used to
- separate property parameters from each other and a COMMA character is
- used to separate property values in a value list.
-
- ATTENDEE;RSVP=TRUE;ROLE=REQ-PARTICIPANT:mailto:
- jsmith@example.com
-
- RDATE;VALUE=DATE:19970304,19970504,19970704,19970904
-
-3.1.2. Multiple Values
-
- Some properties defined in the iCalendar object can have multiple
- values. The general rule for encoding multi-valued items is to
- simply create a new content line for each value, including the
- property name. However, it should be noted that some properties
- support encoding multiple values in a single property by separating
- the values with a COMMA character. Individual property definitions
- should be consulted for determining whether a specific property
- allows multiple values and in which of these two forms. Multi-valued
- properties MUST NOT be used to specify multiple language variants of
- the same value. Calendar applications SHOULD display all values.
-
-3.1.3. Binary Content
-
- Binary content information in an iCalendar object SHOULD be
- referenced using a URI within a property value. That is, the binary
- content information SHOULD be placed in an external MIME entity that
- can be referenced by a URI from within the iCalendar object. In
- applications where this is not feasible, binary content information
- can be included within an iCalendar object, but only after first
- encoding it into text using the "BASE64" encoding method defined in
- [RFC4648]. Inline binary content SHOULD only be used in applications
- whose special circumstances demand that an iCalendar object be
- expressed as a single entity. A property containing inline binary
- content information MUST specify the "ENCODING" property parameter.
- Binary content information placed external to the iCalendar object
- MUST be referenced by a uniform resource identifier (URI).
-
- The following example specifies an "ATTACH" property that references
- an attachment external to the iCalendar object with a URI reference:
-
- ATTACH:http://example.com/public/quarterly-report.doc
-
-
-
-
-
-Desruisseaux Standards Track [Page 12]
-
-RFC 5545 iCalendar September 2009
-
-
- The following example specifies an "ATTACH" property with inline
- binary encoded content information:
-
- ATTACH;FMTTYPE=text/plain;ENCODING=BASE64;VALUE=BINARY:VGhlIH
- F1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIHRoZSBsYXp5IGRvZy4
-
-3.1.4. Character Set
-
- There is not a property parameter to declare the charset used in a
- property value. The default charset for an iCalendar stream is UTF-8
- as defined in [RFC3629].
-
- The "charset" Content-Type parameter MUST be used in MIME transports
- to specify the charset being used.
-
-3.2. Property Parameters
-
- A property can have attributes with which it is associated. These
- "property parameters" contain meta-information about the property or
- the property value. Property parameters are provided to specify such
- information as the location of an alternate text representation for a
- property value, the language of a text property value, the value type
- of the property value, and other attributes.
-
- Property parameter values that contain the COLON, SEMICOLON, or COMMA
- character separators MUST be specified as quoted-string text values.
- Property parameter values MUST NOT contain the DQUOTE character. The
- DQUOTE character is used as a delimiter for parameter values that
- contain restricted characters or URI text. For example:
-
- DESCRIPTION;ALTREP="cid:part1.0001@example.org":The Fall'98 Wild
- Wizards Conference - - Las Vegas\, NV\, USA
-
- Property parameter values that are not in quoted-strings are case-
- insensitive.
-
- The general property parameters defined by this memo are defined by
- the following notation:
-
-
-
-
-
-
-
-
-
-
-
-
-
-Desruisseaux Standards Track [Page 13]
-
-RFC 5545 iCalendar September 2009
-
-
- icalparameter = altrepparam ; Alternate text representation
- / cnparam ; Common name
- / cutypeparam ; Calendar user type
- / delfromparam ; Delegator
- / deltoparam ; Delegatee
- / dirparam ; Directory entry
- / encodingparam ; Inline encoding
- / fmttypeparam ; Format type
- / fbtypeparam ; Free/busy time type
- / languageparam ; Language for text
- / memberparam ; Group or list membership
- / partstatparam ; Participation status
- / rangeparam ; Recurrence identifier range
- / trigrelparam ; Alarm trigger relationship
- / reltypeparam ; Relationship type
- / roleparam ; Participation role
- / rsvpparam ; RSVP expectation
- / sentbyparam ; Sent by
- / tzidparam ; Reference to time zone object
- / valuetypeparam ; Property value data type
- / other-param
-
- other-param = (iana-param / x-param)
-
- iana-param = iana-token "=" param-value *("," param-value)
- ; Some other IANA-registered iCalendar parameter.
-
- x-param = x-name "=" param-value *("," param-value)
- ; A non-standard, experimental parameter.
-
- Applications MUST ignore x-param and iana-param values they don't
- recognize.
-
-3.2.1. Alternate Text Representation
-
- Parameter Name: ALTREP
-
- Purpose: To specify an alternate text representation for the
- property value.
-
- Format Definition: This property parameter is defined by the
- following notation:
-
- altrepparam = "ALTREP" "=" DQUOTE uri DQUOTE
-
- Description: This parameter specifies a URI that points to an
- alternate representation for a textual property value. A property
- specifying this parameter MUST also include a value that reflects
-
-
-
-Desruisseaux Standards Track [Page 14]
-
-RFC 5545 iCalendar September 2009
-
-
- the default representation of the text value. The URI parameter
- value MUST be specified in a quoted-string.
-
- Note: While there is no restriction imposed on the URI schemes
- allowed for this parameter, Content Identifier (CID) [RFC2392],
- HTTP [RFC2616], and HTTPS [RFC2818] are the URI schemes most
- commonly used by current implementations.
-
- Example:
-
- DESCRIPTION;ALTREP="CID:part3.msg.970415T083000@example.com":
- Project XYZ Review Meeting will include the following agenda
- items: (a) Market Overview\, (b) Finances\, (c) Project Man
- agement
-
- The "ALTREP" property parameter value might point to a "text/html"
- content portion.
-
- Content-Type:text/html
- Content-Id:
-
-
-
-
-
-
-
- Project XYZ Review Meeting will include
- the following agenda items:
-
- - Market Overview
- - Finances
- - Project Management
-
-
-
-
-
-3.2.2. Common Name
-
- Parameter Name: CN
-
- Purpose: To specify the common name to be associated with the
- calendar user specified by the property.
-
- Format Definition: This property parameter is defined by the
- following notation:
-
-
-
-
-Desruisseaux Standards Track [Page 15]
-
-RFC 5545 iCalendar September 2009
-
-
- cnparam = "CN" "=" param-value
-
- Description: This parameter can be specified on properties with a
- CAL-ADDRESS value type. The parameter specifies the common name
- to be associated with the calendar user specified by the property.
- The parameter value is text. The parameter value can be used for
- display text to be associated with the calendar address specified
- by the property.
-
- Example:
-
- ORGANIZER;CN="John Smith":mailto:jsmith@example.com
-
-3.2.3. Calendar User Type
-
- Parameter Name: CUTYPE
-
- Purpose: To identify the type of calendar user specified by the
- property.
-
- Format Definition: This property parameter is defined by the
- following notation:
-
- cutypeparam = "CUTYPE" "="
- ("INDIVIDUAL" ; An individual
- / "GROUP" ; A group of individuals
- / "RESOURCE" ; A physical resource
- / "ROOM" ; A room resource
- / "UNKNOWN" ; Otherwise not known
- / x-name ; Experimental type
- / iana-token) ; Other IANA-registered
- ; type
- ; Default is INDIVIDUAL
-
- Description: This parameter can be specified on properties with a
- CAL-ADDRESS value type. The parameter identifies the type of
- calendar user specified by the property. If not specified on a
- property that allows this parameter, the default is INDIVIDUAL.
- Applications MUST treat x-name and iana-token values they don't
- recognize the same way as they would the UNKNOWN value.
-
- Example:
-
- ATTENDEE;CUTYPE=GROUP:mailto:ietf-calsch@example.org
-
-
-
-
-
-
-
-Desruisseaux Standards Track [Page 16]
-
-RFC 5545 iCalendar September 2009
-
-
-3.2.4. Delegators
-
- Parameter Name: DELEGATED-FROM
-
- Purpose: To specify the calendar users that have delegated their
- participation to the calendar user specified by the property.
-
- Format Definition: This property parameter is defined by the
- following notation:
-
- delfromparam = "DELEGATED-FROM" "=" DQUOTE cal-address
- DQUOTE *("," DQUOTE cal-address DQUOTE)
-
- Description: This parameter can be specified on properties with a
- CAL-ADDRESS value type. This parameter specifies those calendar
- users that have delegated their participation in a group-scheduled
- event or to-do to the calendar user specified by the property.
- The individual calendar address parameter values MUST each be
- specified in a quoted-string.
-
- Example:
-
- ATTENDEE;DELEGATED-FROM="mailto:jsmith@example.com":mailto:
- jdoe@example.com
-
-3.2.5. Delegatees
-
- Parameter Name: DELEGATED-TO
-
- Purpose: To specify the calendar users to whom the calendar user
- specified by the property has delegated participation.
-
- Format Definition: This property parameter is defined by the
- following notation:
-
- deltoparam = "DELEGATED-TO" "=" DQUOTE cal-address DQUOTE
- *("," DQUOTE cal-address DQUOTE)
-
- Description: This parameter can be specified on properties with a
- CAL-ADDRESS value type. This parameter specifies those calendar
- users whom have been delegated participation in a group-scheduled
- event or to-do by the calendar user specified by the property.
- The individual calendar address parameter values MUST each be
- specified in a quoted-string.
-
-
-
-
-
-
-
-Desruisseaux Standards Track [Page 17]
-
-RFC 5545 iCalendar September 2009
-
-
- Example:
-
- ATTENDEE;DELEGATED-TO="mailto:jdoe@example.com","mailto:jqpublic
- @example.com":mailto:jsmith@example.com
-
-3.2.6. Directory Entry Reference
-
- Parameter Name: DIR
-
- Purpose: To specify reference to a directory entry associated with
- the calendar user specified by the property.
-
- Format Definition: This property parameter is defined by the
- following notation:
-
- dirparam = "DIR" "=" DQUOTE uri DQUOTE
-
- Description: This parameter can be specified on properties with a
- CAL-ADDRESS value type. The parameter specifies a reference to
- the directory entry associated with the calendar user specified by
- the property. The parameter value is a URI. The URI parameter
- value MUST be specified in a quoted-string.
-
- Note: While there is no restriction imposed on the URI schemes
- allowed for this parameter, CID [RFC2392], DATA [RFC2397], FILE
- [RFC1738], FTP [RFC1738], HTTP [RFC2616], HTTPS [RFC2818], LDAP
- [RFC4516], and MID [RFC2392] are the URI schemes most commonly
- used by current implementations.
-
- Example:
-
- ORGANIZER;DIR="ldap://example.com:6666/o=ABC%20Industries,
- c=US???(cn=Jim%20Dolittle)":mailto:jimdo@example.com
-
-3.2.7. Inline Encoding
-
- Parameter Name: ENCODING
-
- Purpose: To specify an alternate inline encoding for the property
- value.
-
- Format Definition: This property parameter is defined by the
- following notation:
-
-
-
-
-
-
-
-
-Desruisseaux Standards Track [Page 18]
-
-RFC 5545 iCalendar September 2009
-
-
- encodingparam = "ENCODING" "="
- ( "8BIT"
- ; "8bit" text encoding is defined in [RFC2045]
- / "BASE64"
- ; "BASE64" binary encoding format is defined in [RFC4648]
- )
-
- Description: This property parameter identifies the inline encoding
- used in a property value. The default encoding is "8BIT",
- corresponding to a property value consisting of text. The
- "BASE64" encoding type corresponds to a property value encoded
- using the "BASE64" encoding defined in [RFC2045].
-
- If the value type parameter is ";VALUE=BINARY", then the inline
- encoding parameter MUST be specified with the value
- ";ENCODING=BASE64".
-
- Example:
-
- ATTACH;FMTTYPE=text/plain;ENCODING=BASE64;VALUE=BINARY:TG9yZW
- 0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2ljaW
- 5nIGVsaXQsIHNlZCBkbyBlaXVzbW9kIHRlbXBvciBpbmNpZGlkdW50IHV0IG
- xhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXVhLiBVdCBlbmltIGFkIG1pbm
- ltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaXRhdGlvbiB1bGxhbWNvIG
- xhYm9yaXMgbmlzaSB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdW
- F0LiBEdWlzIGF1dGUgaXJ1cmUgZG9sb3IgaW4gcmVwcmVoZW5kZXJpdCBpbi
- B2b2x1cHRhdGUgdmVsaXQgZXNzZSBjaWxsdW0gZG9sb3JlIGV1IGZ1Z2lhdC
- BudWxsYSBwYXJpYXR1ci4gRXhjZXB0ZXVyIHNpbnQgb2NjYWVjYXQgY3VwaW
- RhdGF0IG5vbiBwcm9pZGVudCwgc3VudCBpbiBjdWxwYSBxdWkgb2ZmaWNpYS
- BkZXNlcnVudCBtb2xsaXQgYW5pbSBpZCBlc3QgbGFib3J1bS4=
-
-3.2.8. Format Type
-
- Parameter Name: FMTTYPE
-
- Purpose: To specify the content type of a referenced object.
-
- Format Definition: This property parameter is defined by the
- following notation:
-
- fmttypeparam = "FMTTYPE" "=" type-name "/" subtype-name
- ; Where "type-name" and "subtype-name" are
- ; defined in Section 4.2 of [RFC4288].
-
- Description: This parameter can be specified on properties that are
- used to reference an object. The parameter specifies the media
- type [RFC4288] of the referenced object. For example, on the
- "ATTACH" property, an FTP type URI value does not, by itself,
-
-
-
-Desruisseaux Standards Track [Page 19]
-
-RFC 5545 iCalendar September 2009
-
-
- necessarily convey the type of content associated with the
- resource. The parameter value MUST be the text for either an
- IANA-registered media type or a non-standard media type.
-
- Example:
-
- ATTACH;FMTTYPE=application/msword:ftp://example.com/pub/docs/
- agenda.doc
-
-3.2.9. Free/Busy Time Type
-
- Parameter Name: FBTYPE
-
- Purpose: To specify the free or busy time type.
-
- Format Definition: This property parameter is defined by the
- following notation:
-
- fbtypeparam = "FBTYPE" "=" ("FREE" / "BUSY"
- / "BUSY-UNAVAILABLE" / "BUSY-TENTATIVE"
- / x-name
- ; Some experimental iCalendar free/busy type.
- / iana-token)
- ; Some other IANA-registered iCalendar free/busy type.
-
- Description: This parameter specifies the free or busy time type.
- The value FREE indicates that the time interval is free for
- scheduling. The value BUSY indicates that the time interval is
- busy because one or more events have been scheduled for that
- interval. The value BUSY-UNAVAILABLE indicates that the time
- interval is busy and that the interval can not be scheduled. The
- value BUSY-TENTATIVE indicates that the time interval is busy
- because one or more events have been tentatively scheduled for
- that interval. If not specified on a property that allows this
- parameter, the default is BUSY. Applications MUST treat x-name
- and iana-token values they don't recognize the same way as they
- would the BUSY value.
-
- Example: The following is an example of this parameter on a
- "FREEBUSY" property.
-
- FREEBUSY;FBTYPE=BUSY:19980415T133000Z/19980415T170000Z
-
-
-
-
-
-
-
-
-
-Desruisseaux Standards Track [Page 20]
-
-RFC 5545 iCalendar September 2009
-
-
-3.2.10. Language
-
- Parameter Name: LANGUAGE
-
- Purpose: To specify the language for text values in a property or
- property parameter.
-
- Format Definition: This property parameter is defined by the
- following notation:
-
- languageparam = "LANGUAGE" "=" language
-
- language = Language-Tag
- ; As defined in [RFC5646].
-
- Description: This parameter identifies the language of the text in
- the property value and of all property parameter values of the
- property. The value of the "LANGUAGE" property parameter is that
- defined in [RFC5646].
-
- For transport in a MIME entity, the Content-Language header field
- can be used to set the default language for the entire body part.
- Otherwise, no default language is assumed.
-
- Example: The following are examples of this parameter on the
- "SUMMARY" and "LOCATION" properties:
-
- SUMMARY;LANGUAGE=en-US:Company Holiday Party
-
- LOCATION;LANGUAGE=en:Germany
-
- LOCATION;LANGUAGE=no:Tyskland
-
-3.2.11. Group or List Membership
-
- Parameter Name: MEMBER
-
- Purpose: To specify the group or list membership of the calendar
- user specified by the property.
-
- Format Definition: This property parameter is defined by the
- following notation:
-
- memberparam = "MEMBER" "=" DQUOTE cal-address DQUOTE
- *("," DQUOTE cal-address DQUOTE)
-
-
-
-
-
-
-Desruisseaux Standards Track [Page 21]
-
-RFC 5545 iCalendar September 2009
-
-
- Description: This parameter can be specified on properties with a
- CAL-ADDRESS value type. The parameter identifies the groups or
- list membership for the calendar user specified by the property.
- The parameter value is either a single calendar address in a
- quoted-string or a COMMA-separated list of calendar addresses,
- each in a quoted-string. The individual calendar address
- parameter values MUST each be specified in a quoted-string.
-
- Example:
-
- ATTENDEE;MEMBER="mailto:ietf-calsch@example.org":mailto:
- jsmith@example.com
-
- ATTENDEE;MEMBER="mailto:projectA@example.com","mailto:pr
- ojectB@example.com":mailto:janedoe@example.com
-
-3.2.12. Participation Status
-
- Parameter Name: PARTSTAT
-
- Purpose: To specify the participation status for the calendar user
- specified by the property.
-
- Format Definition: This property parameter is defined by the
- following notation:
-
- partstatparam = "PARTSTAT" "="
- (partstat-event
- / partstat-todo
- / partstat-jour)
-
- partstat-event = ("NEEDS-ACTION" ; Event needs action
- / "ACCEPTED" ; Event accepted
- / "DECLINED" ; Event declined
- / "TENTATIVE" ; Event tentatively
- ; accepted
- / "DELEGATED" ; Event delegated
- / x-name ; Experimental status
- / iana-token) ; Other IANA-registered
- ; status
- ; These are the participation statuses for a "VEVENT".
- ; Default is NEEDS-ACTION.
-
- partstat-todo = ("NEEDS-ACTION" ; To-do needs action
- / "ACCEPTED" ; To-do accepted
- / "DECLINED" ; To-do declined
- / "TENTATIVE" ; To-do tentatively
- ; accepted
-
-
-
-Desruisseaux Standards Track [Page 22]
-
-RFC 5545 iCalendar September 2009
-
-
- / "DELEGATED" ; To-do delegated
- / "COMPLETED" ; To-do completed
- ; COMPLETED property has
- ; DATE-TIME completed
- / "IN-PROCESS" ; To-do in process of
- ; being completed
- / x-name ; Experimental status
- / iana-token) ; Other IANA-registered
- ; status
- ; These are the participation statuses for a "VTODO".
- ; Default is NEEDS-ACTION.
-
-
-
- partstat-jour = ("NEEDS-ACTION" ; Journal needs action
- / "ACCEPTED" ; Journal accepted
- / "DECLINED" ; Journal declined
- / x-name ; Experimental status
- / iana-token) ; Other IANA-registered
- ; status
- ; These are the participation statuses for a "VJOURNAL".
- ; Default is NEEDS-ACTION.
-
- Description: This parameter can be specified on properties with a
- CAL-ADDRESS value type. The parameter identifies the
- participation status for the calendar user specified by the
- property value. The parameter values differ depending on whether
- they are associated with a group-scheduled "VEVENT", "VTODO", or
- "VJOURNAL". The values MUST match one of the values allowed for
- the given calendar component. If not specified on a property that
- allows this parameter, the default value is NEEDS-ACTION.
- Applications MUST treat x-name and iana-token values they don't
- recognize the same way as they would the NEEDS-ACTION value.
-
- Example:
-
- ATTENDEE;PARTSTAT=DECLINED:mailto:jsmith@example.com
-
-3.2.13. Recurrence Identifier Range
-
- Parameter Name: RANGE
-
- Purpose: To specify the effective range of recurrence instances from
- the instance specified by the recurrence identifier specified by
- the property.
-
- Format Definition: This property parameter is defined by the
- following notation:
-
-
-
-Desruisseaux Standards Track [Page 23]
-
-RFC 5545 iCalendar September 2009
-
-
- rangeparam = "RANGE" "=" "THISANDFUTURE"
- ; To specify the instance specified by the recurrence identifier
- ; and all subsequent recurrence instances.
-
- Description: This parameter can be specified on a property that
- specifies a recurrence identifier. The parameter specifies the
- effective range of recurrence instances that is specified by the
- property. The effective range is from the recurrence identifier
- specified by the property. If this parameter is not specified on
- an allowed property, then the default range is the single instance
- specified by the recurrence identifier value of the property. The
- parameter value can only be "THISANDFUTURE" to indicate a range
- defined by the recurrence identifier and all subsequent instances.
- The value "THISANDPRIOR" is deprecated by this revision of
- iCalendar and MUST NOT be generated by applications.
-
- Example:
-
- RECURRENCE-ID;RANGE=THISANDFUTURE:19980401T133000Z
-
-3.2.14. Alarm Trigger Relationship
-
- Parameter Name: RELATED
-
- Purpose: To specify the relationship of the alarm trigger with
- respect to the start or end of the calendar component.
-
- Format Definition: This property parameter is defined by the
- following notation:
-
- trigrelparam = "RELATED" "="
- ("START" ; Trigger off of start
- / "END") ; Trigger off of end
-
- Description: This parameter can be specified on properties that
- specify an alarm trigger with a "DURATION" value type. The
- parameter specifies whether the alarm will trigger relative to the
- start or end of the calendar component. The parameter value START
- will set the alarm to trigger off the start of the calendar
- component; the parameter value END will set the alarm to trigger
- off the end of the calendar component. If the parameter is not
- specified on an allowable property, then the default is START.
-
- Example:
-
- TRIGGER;RELATED=END:PT5M
-
-
-
-
-
-Desruisseaux Standards Track [Page 24]
-
-RFC 5545 iCalendar September 2009
-
-
-3.2.15. Relationship Type
-
- Parameter Name: RELTYPE
-
- Purpose: To specify the type of hierarchical relationship associated
- with the calendar component specified by the property.
-
- Format Definition: This property parameter is defined by the
- following notation:
-
- reltypeparam = "RELTYPE" "="
- ("PARENT" ; Parent relationship - Default
- / "CHILD" ; Child relationship
- / "SIBLING" ; Sibling relationship
- / iana-token ; Some other IANA-registered
- ; iCalendar relationship type
- / x-name) ; A non-standard, experimental
- ; relationship type
-
- Description: This parameter can be specified on a property that
- references another related calendar. The parameter specifies the
- hierarchical relationship type of the calendar component
- referenced by the property. The parameter value can be PARENT, to
- indicate that the referenced calendar component is a superior of
- calendar component; CHILD to indicate that the referenced calendar
- component is a subordinate of the calendar component; or SIBLING
- to indicate that the referenced calendar component is a peer of
- the calendar component. If this parameter is not specified on an
- allowable property, the default relationship type is PARENT.
- Applications MUST treat x-name and iana-token values they don't
- recognize the same way as they would the PARENT value.
-
- Example:
-
- RELATED-TO;RELTYPE=SIBLING:19960401-080045-4000F192713@
- example.com
-
-3.2.16. Participation Role
-
- Parameter Name: ROLE
-
- Purpose: To specify the participation role for the calendar user
- specified by the property.
-
- Format Definition: This property parameter is defined by the
- following notation:
-
-
-
-
-
-Desruisseaux Standards Track [Page 25]
-
-RFC 5545 iCalendar September 2009
-
-
- roleparam = "ROLE" "="
- ("CHAIR" ; Indicates chair of the
- ; calendar entity
- / "REQ-PARTICIPANT" ; Indicates a participant whose
- ; participation is required
- / "OPT-PARTICIPANT" ; Indicates a participant whose
- ; participation is optional
- / "NON-PARTICIPANT" ; Indicates a participant who
- ; is copied for information
- ; purposes only
- / x-name ; Experimental role
- / iana-token) ; Other IANA role
- ; Default is REQ-PARTICIPANT
-
- Description: This parameter can be specified on properties with a
- CAL-ADDRESS value type. The parameter specifies the participation
- role for the calendar user specified by the property in the group
- schedule calendar component. If not specified on a property that
- allows this parameter, the default value is REQ-PARTICIPANT.
- Applications MUST treat x-name and iana-token values they don't
- recognize the same way as they would the REQ-PARTICIPANT value.
-
- Example:
-
- ATTENDEE;ROLE=CHAIR:mailto:mrbig@example.com
-
-3.2.17. RSVP Expectation
-
- Parameter Name: RSVP
-
- Purpose: To specify whether there is an expectation of a favor of a
- reply from the calendar user specified by the property value.
-
- Format Definition: This property parameter is defined by the
- following notation:
-
- rsvpparam = "RSVP" "=" ("TRUE" / "FALSE")
- ; Default is FALSE
-
- Description: This parameter can be specified on properties with a
- CAL-ADDRESS value type. The parameter identifies the expectation
- of a reply from the calendar user specified by the property value.
- This parameter is used by the "Organizer" to request a
- participation status reply from an "Attendee" of a group-scheduled
- event or to-do. If not specified on a property that allows this
- parameter, the default value is FALSE.
-
-
-
-
-
-Desruisseaux Standards Track [Page 26]
-
-RFC 5545 iCalendar September 2009
-
-
- Example:
-
- ATTENDEE;RSVP=TRUE:mailto:jsmith@example.com
-
-3.2.18. Sent By
-
- Parameter Name: SENT-BY
-
- Purpose: To specify the calendar user that is acting on behalf of
- the calendar user specified by the property.
-
- Format Definition: This property parameter is defined by the
- following notation:
-
- sentbyparam = "SENT-BY" "=" DQUOTE cal-address DQUOTE
-
- Description: This parameter can be specified on properties with a
- CAL-ADDRESS value type. The parameter specifies the calendar user
- that is acting on behalf of the calendar user specified by the
- property. The parameter value MUST be a mailto URI as defined in
- [RFC2368]. The individual calendar address parameter values MUST
- each be specified in a quoted-string.
-
- Example:
-
- ORGANIZER;SENT-BY="mailto:sray@example.com":mailto:
- jsmith@example.com
-
-3.2.19. Time Zone Identifier
-
- Parameter Name: TZID
-
- Purpose: To specify the identifier for the time zone definition for
- a time component in the property value.
-
- Format Definition: This property parameter is defined by the
- following notation:
-
- tzidparam = "TZID" "=" [tzidprefix] paramtext
-
- tzidprefix = "/"
-
- Description: This parameter MUST be specified on the "DTSTART",
- "DTEND", "DUE", "EXDATE", and "RDATE" properties when either a
- DATE-TIME or TIME value type is specified and when the value is
- neither a UTC or a "floating" time. Refer to the DATE-TIME or
- TIME value type definition for a description of UTC and "floating
- time" formats. This property parameter specifies a text value
-
-
-
-Desruisseaux Standards Track [Page 27]
-
-RFC 5545 iCalendar September 2009
-
-
- that uniquely identifies the "VTIMEZONE" calendar component to be
- used when evaluating the time portion of the property. The value
- of the "TZID" property parameter will be equal to the value of the
- "TZID" property for the matching time zone definition. An
- individual "VTIMEZONE" calendar component MUST be specified for
- each unique "TZID" parameter value specified in the iCalendar
- object.
-
- The parameter MUST be specified on properties with a DATE-TIME
- value if the DATE-TIME is not either a UTC or a "floating" time.
- Failure to include and follow VTIMEZONE definitions in iCalendar
- objects may lead to inconsistent understanding of the local time
- at any given location.
-
- The presence of the SOLIDUS character as a prefix, indicates that
- this "TZID" represents a unique ID in a globally defined time zone
- registry (when such registry is defined).
-
- Note: This document does not define a naming convention for
- time zone identifiers. Implementers may want to use the naming
- conventions defined in existing time zone specifications such
- as the public-domain TZ database [TZDB]. The specification of
- globally unique time zone identifiers is not addressed by this
- document and is left for future study.
-
- The following are examples of this property parameter:
-
- DTSTART;TZID=America/New_York:19980119T020000
-
- DTEND;TZID=America/New_York:19980119T030000
-
- The "TZID" property parameter MUST NOT be applied to DATE
- properties and DATE-TIME or TIME properties whose time values are
- specified in UTC.
-
- The use of local time in a DATE-TIME or TIME value without the
- "TZID" property parameter is to be interpreted as floating time,
- regardless of the existence of "VTIMEZONE" calendar components in
- the iCalendar object.
-
- For more information, see the sections on the value types DATE-
- TIME and TIME.
-
-
-
-
-
-
-
-
-
-Desruisseaux Standards Track [Page 28]
-
-RFC 5545 iCalendar September 2009
-
-
-3.2.20. Value Data Types
-
- Parameter Name: VALUE
-
- Purpose: To explicitly specify the value type format for a property
- value.
-
- Format Definition: This property parameter is defined by the
- following notation:
-
- valuetypeparam = "VALUE" "=" valuetype
-
- valuetype = ("BINARY"
- / "BOOLEAN"
- / "CAL-ADDRESS"
- / "DATE"
- / "DATE-TIME"
- / "DURATION"
- / "FLOAT"
- / "INTEGER"
- / "PERIOD"
- / "RECUR"
- / "TEXT"
- / "TIME"
- / "URI"
- / "UTC-OFFSET"
- / x-name
- ; Some experimental iCalendar value type.
- / iana-token)
- ; Some other IANA-registered iCalendar value type.
-
- Description: This parameter specifies the value type and format of
- the property value. The property values MUST be of a single value
- type. For example, a "RDATE" property cannot have a combination
- of DATE-TIME and TIME value types.
-
- If the property's value is the default value type, then this
- parameter need not be specified. However, if the property's
- default value type is overridden by some other allowable value
- type, then this parameter MUST be specified.
-
- Applications MUST preserve the value data for x-name and iana-
- token values that they don't recognize without attempting to
- interpret or parse the value data.
-
-
-
-
-
-
-
-Desruisseaux Standards Track [Page 29]
-
-RFC 5545 iCalendar September 2009
-
-
-3.3. Property Value Data Types
-
- The properties in an iCalendar object are strongly typed. The
- definition of each property restricts the value to be one of the
- value data types, or simply value types, defined in this section.
- The value type for a property will either be specified implicitly as
- the default value type or will be explicitly specified with the
- "VALUE" parameter. If the value type of a property is one of the
- alternate valid types, then it MUST be explicitly specified with the
- "VALUE" parameter.
-
-3.3.1. Binary
-
- Value Name: BINARY
-
- Purpose: This value type is used to identify properties that contain
- a character encoding of inline binary data. For example, an
- inline attachment of a document might be included in an iCalendar
- object.
-
- Format Definition: This value type is defined by the following
- notation:
-
- binary = *(4b-char) [b-end]
- ; A "BASE64" encoded character string, as defined by [RFC4648].
-
- b-end = (2b-char "==") / (3b-char "=")
-
- b-char = ALPHA / DIGIT / "+" / "/"
-
- Description: Property values with this value type MUST also include
- the inline encoding parameter sequence of ";ENCODING=BASE64".
- That is, all inline binary data MUST first be character encoded
- using the "BASE64" encoding method defined in [RFC2045]. No
- additional content value encoding (i.e., BACKSLASH character
- encoding, see Section 3.3.11) is defined for this value type.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Desruisseaux Standards Track [Page 30]
-
-RFC 5545 iCalendar September 2009
-
-
- Example: The following is an example of a "BASE64" encoded binary
- value data:
-
- ATTACH;FMTTYPE=image/vnd.microsoft.icon;ENCODING=BASE64;VALUE
- =BINARY:AAABAAEAEBAQAAEABAAoAQAAFgAAACgAAAAQAAAAIAAAAAEABAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAgIAAAICAgADAwMAA////AAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAMwAAAAAAABNEMQAAAAAAAkQgAAAAAAJEREQgAA
- ACECQ0QgEgAAQxQzM0E0AABERCRCREQAADRDJEJEQwAAAhA0QwEQAAAAAERE
- AAAAAAAAREQAAAAAAAAkQgAAAAAAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAA
-
-3.3.2. Boolean
-
- Value Name: BOOLEAN
-
- Purpose: This value type is used to identify properties that contain
- either a "TRUE" or "FALSE" Boolean value.
-
- Format Definition: This value type is defined by the following
- notation:
-
- boolean = "TRUE" / "FALSE"
-
- Description: These values are case-insensitive text. No additional
- content value encoding (i.e., BACKSLASH character encoding, see
- Section 3.3.11) is defined for this value type.
-
- Example: The following is an example of a hypothetical property that
- has a BOOLEAN value type:
-
- TRUE
-
-3.3.3. Calendar User Address
-
- Value Name: CAL-ADDRESS
-
- Purpose: This value type is used to identify properties that contain
- a calendar user address.
-
- Format Definition: This value type is defined by the following
- notation:
-
- cal-address = uri
-
- Description: The value is a URI as defined by [RFC3986] or any other
- IANA-registered form for a URI. When used to address an Internet
-
-
-
-Desruisseaux Standards Track [Page 31]
-
-RFC 5545 iCalendar September 2009
-
-
- email transport address for a calendar user, the value MUST be a
- mailto URI, as defined by [RFC2368]. No additional content value
- encoding (i.e., BACKSLASH character encoding, see Section 3.3.11)
- is defined for this value type.
-
- Example:
-
- mailto:jane_doe@example.com
-
-3.3.4. Date
-
- Value Name: DATE
-
- Purpose: This value type is used to identify values that contain a
- calendar date.
-
- Format Definition: This value type is defined by the following
- notation:
-
- date = date-value
-
- date-value = date-fullyear date-month date-mday
- date-fullyear = 4DIGIT
- date-month = 2DIGIT ;01-12
- date-mday = 2DIGIT ;01-28, 01-29, 01-30, 01-31
- ;based on month/year
-
- Description: If the property permits, multiple "date" values are
- specified as a COMMA-separated list of values. The format for the
- value type is based on the [ISO.8601.2004] complete
- representation, basic format for a calendar date. The textual
- format specifies a four-digit year, two-digit month, and two-digit
- day of the month. There are no separator characters between the
- year, month, and day component text.
-
- No additional content value encoding (i.e., BACKSLASH character
- encoding, see Section 3.3.11) is defined for this value type.
-
- Example: The following represents July 14, 1997:
-
- 19970714
-
-3.3.5. Date-Time
-
- Value Name: DATE-TIME
-
- Purpose: This value type is used to identify values that specify a
- precise calendar date and time of day.
-
-
-
-Desruisseaux Standards Track [Page 32]
-
-RFC 5545 iCalendar September 2009
-
-
- Format Definition: This value type is defined by the following
- notation:
-
- date-time = date "T" time ;As specified in the DATE and TIME
- ;value definitions
-
- Description: If the property permits, multiple "DATE-TIME" values
- are specified as a COMMA-separated list of values. No additional
- content value encoding (i.e., BACKSLASH character encoding, see
- Section 3.3.11) is defined for this value type.
-
- The "DATE-TIME" value type is used to identify values that contain
- a precise calendar date and time of day. The format is based on
- the [ISO.8601.2004] complete representation, basic format for a
- calendar date and time of day. The text format is a concatenation
- of the "date", followed by the LATIN CAPITAL LETTER T character,
- the time designator, followed by the "time" format.
-
- The "DATE-TIME" value type expresses time values in three forms:
-
- The form of date and time with UTC offset MUST NOT be used. For
- example, the following is not valid for a DATE-TIME value:
-
- 19980119T230000-0800 ;Invalid time format
-
- FORM #1: DATE WITH LOCAL TIME
-
- The date with local time form is simply a DATE-TIME value that
- does not contain the UTC designator nor does it reference a time
- zone. For example, the following represents January 18, 1998, at
- 11 PM:
-
- 19980118T230000
-
- DATE-TIME values of this type are said to be "floating" and are
- not bound to any time zone in particular. They are used to
- represent the same hour, minute, and second value regardless of
- which time zone is currently being observed. For example, an
- event can be defined that indicates that an individual will be
- busy from 11:00 AM to 1:00 PM every day, no matter which time zone
- the person is in. In these cases, a local time can be specified.
- The recipient of an iCalendar object with a property value
- consisting of a local time, without any relative time zone
- information, SHOULD interpret the value as being fixed to whatever
- time zone the "ATTENDEE" is in at any given moment. This means
- that two "Attendees", in different time zones, receiving the same
- event definition as a floating time, may be participating in the
-
-
-
-
-Desruisseaux Standards Track [Page 33]
-
-RFC 5545 iCalendar September 2009
-
-
- event at different actual times. Floating time SHOULD only be
- used where that is the reasonable behavior.
-
- In most cases, a fixed time is desired. To properly communicate a
- fixed time in a property value, either UTC time or local time with
- time zone reference MUST be specified.
-
- The use of local time in a DATE-TIME value without the "TZID"
- property parameter is to be interpreted as floating time,
- regardless of the existence of "VTIMEZONE" calendar components in
- the iCalendar object.
-
- FORM #2: DATE WITH UTC TIME
-
- The date with UTC time, or absolute time, is identified by a LATIN
- CAPITAL LETTER Z suffix character, the UTC designator, appended to
- the time value. For example, the following represents January 19,
- 1998, at 0700 UTC:
-
- 19980119T070000Z
-
- The "TZID" property parameter MUST NOT be applied to DATE-TIME
- properties whose time values are specified in UTC.
-
- FORM #3: DATE WITH LOCAL TIME AND TIME ZONE REFERENCE
-
- The date and local time with reference to time zone information is
- identified by the use the "TZID" property parameter to reference
- the appropriate time zone definition. "TZID" is discussed in
- detail in Section 3.2.19. For example, the following represents
- 2:00 A.M. in New York on January 19, 1998:
-
- TZID=America/New_York:19980119T020000
-
- If, based on the definition of the referenced time zone, the local
- time described occurs more than once (when changing from daylight
- to standard time), the DATE-TIME value refers to the first
- occurrence of the referenced time. Thus, TZID=America/
- New_York:20071104T013000 indicates November 4, 2007 at 1:30 A.M.
- EDT (UTC-04:00). If the local time described does not occur (when
- changing from standard to daylight time), the DATE-TIME value is
- interpreted using the UTC offset before the gap in local times.
- Thus, TZID=America/New_York:20070311T023000 indicates March 11,
- 2007 at 3:30 A.M. EDT (UTC-04:00), one hour after 1:30 A.M. EST
- (UTC-05:00).
-
-
-
-
-
-
-Desruisseaux Standards Track [Page 34]
-
-RFC 5545 iCalendar September 2009
-
-
- A time value MUST only specify the second 60 when specifying a
- positive leap second. For example:
-
- 19970630T235960Z
-
- Implementations that do not support leap seconds SHOULD interpret
- the second 60 as equivalent to the second 59.
-
- Example: The following represents July 14, 1997, at 1:30 PM in New
- York City in each of the three time formats, using the "DTSTART"
- property.
-
- DTSTART:19970714T133000 ; Local time
- DTSTART:19970714T173000Z ; UTC time
- DTSTART;TZID=America/New_York:19970714T133000
- ; Local time and time
- ; zone reference
-
-3.3.6. Duration
-
- Value Name: DURATION
-
- Purpose: This value type is used to identify properties that contain
- a duration of time.
-
- Format Definition: This value type is defined by the following
- notation:
-
- dur-value = (["+"] / "-") "P" (dur-date / dur-time / dur-week)
-
- dur-date = dur-day [dur-time]
- dur-time = "T" (dur-hour / dur-minute / dur-second)
- dur-week = 1*DIGIT "W"
- dur-hour = 1*DIGIT "H" [dur-minute]
- dur-minute = 1*DIGIT "M" [dur-second]
- dur-second = 1*DIGIT "S"
- dur-day = 1*DIGIT "D"
-
- Description: If the property permits, multiple "duration" values are
- specified by a COMMA-separated list of values. The format is
- based on the [ISO.8601.2004] complete representation basic format
- with designators for the duration of time. The format can
- represent nominal durations (weeks and days) and accurate
- durations (hours, minutes, and seconds). Note that unlike
- [ISO.8601.2004], this value type doesn't support the "Y" and "M"
- designators to specify durations in terms of years and months.
-
-
-
-
-
-Desruisseaux Standards Track [Page 35]
-
-RFC 5545 iCalendar September 2009
-
-
- The duration of a week or a day depends on its position in the
- calendar. In the case of discontinuities in the time scale, such
- as the change from standard time to daylight time and back, the
- computation of the exact duration requires the subtraction or
- addition of the change of duration of the discontinuity. Leap
- seconds MUST NOT be considered when computing an exact duration.
- When computing an exact duration, the greatest order time
- components MUST be added first, that is, the number of days MUST
- be added first, followed by the number of hours, number of
- minutes, and number of seconds.
-
- Negative durations are typically used to schedule an alarm to
- trigger before an associated time (see Section 3.8.6.3).
-
- No additional content value encoding (i.e., BACKSLASH character
- encoding, see Section 3.3.11) are defined for this value type.
-
- Example: A duration of 15 days, 5 hours, and 20 seconds would be:
-
- P15DT5H0M20S
-
- A duration of 7 weeks would be:
-
- P7W
-
-3.3.7. Float
-
- Value Name: FLOAT
-
- Purpose: This value type is used to identify properties that contain
- a real-number value.
-
- Format Definition: This value type is defined by the following
- notation:
-
- float = (["+"] / "-") 1*DIGIT ["." 1*DIGIT]
-
- Description: If the property permits, multiple "float" values are
- specified by a COMMA-separated list of values.
-
- No additional content value encoding (i.e., BACKSLASH character
- encoding, see Section 3.3.11) is defined for this value type.
-
- Example:
-
- 1000000.0000001
- 1.333
- -3.14
-
-
-
-Desruisseaux Standards Track [Page 36]
-
-RFC 5545 iCalendar September 2009
-
-
-3.3.8. Integer
-
- Value Name: INTEGER
-
- Purpose: This value type is used to identify properties that contain
- a signed integer value.
-
- Format Definition: This value type is defined by the following
- notation:
-
- integer = (["+"] / "-") 1*DIGIT
-
- Description: If the property permits, multiple "integer" values are
- specified by a COMMA-separated list of values. The valid range
- for "integer" is -2147483648 to 2147483647. If the sign is not
- specified, then the value is assumed to be positive.
-
- No additional content value encoding (i.e., BACKSLASH character
- encoding, see Section 3.3.11) is defined for this value type.
-
- Example:
-
- 1234567890
- -1234567890
- +1234567890
- 432109876
-
-3.3.9. Period of Time
-
- Value Name: PERIOD
-
- Purpose: This value type is used to identify values that contain a
- precise period of time.
-
- Format Definition: This value type is defined by the following
- notation:
-
- period = period-explicit / period-start
-
- period-explicit = date-time "/" date-time
- ; [ISO.8601.2004] complete representation basic format for a
- ; period of time consisting of a start and end. The start MUST
- ; be before the end.
-
- period-start = date-time "/" dur-value
- ; [ISO.8601.2004] complete representation basic format for a
- ; period of time consisting of a start and positive duration
- ; of time.
-
-
-
-Desruisseaux Standards Track [Page 37]
-
-RFC 5545 iCalendar September 2009
-
-
- Description: If the property permits, multiple "period" values are
- specified by a COMMA-separated list of values. There are two
- forms of a period of time. First, a period of time is identified
- by its start and its end. This format is based on the
- [ISO.8601.2004] complete representation, basic format for "DATE-
- TIME" start of the period, followed by a SOLIDUS character
- followed by the "DATE-TIME" of the end of the period. The start
- of the period MUST be before the end of the period. Second, a
- period of time can also be defined by a start and a positive
- duration of time. The format is based on the [ISO.8601.2004]
- complete representation, basic format for the "DATE-TIME" start of
- the period, followed by a SOLIDUS character, followed by the
- [ISO.8601.2004] basic format for "DURATION" of the period.
-
- Example: The period starting at 18:00:00 UTC, on January 1, 1997 and
- ending at 07:00:00 UTC on January 2, 1997 would be:
-
- 19970101T180000Z/19970102T070000Z
-
- The period start at 18:00:00 on January 1, 1997 and lasting 5
- hours and 30 minutes would be:
-
- 19970101T180000Z/PT5H30M
-
- No additional content value encoding (i.e., BACKSLASH character
- encoding, see Section 3.3.11) is defined for this value type.
-
-3.3.10. Recurrence Rule
-
- Value Name: RECUR
-
- Purpose: This value type is used to identify properties that contain
- a recurrence rule specification.
-
- Format Definition: This value type is defined by the following
- notation:
-
- recur = recur-rule-part *( ";" recur-rule-part )
- ;
- ; The rule parts are not ordered in any
- ; particular sequence.
- ;
- ; The FREQ rule part is REQUIRED,
- ; but MUST NOT occur more than once.
- ;
- ; The UNTIL or COUNT rule parts are OPTIONAL,
- ; but they MUST NOT occur in the same 'recur'.
- ;
-
-
-
-Desruisseaux Standards Track [Page 38]
-
-RFC 5545 iCalendar September 2009
-
-
- ; The other rule parts are OPTIONAL,
- ; but MUST NOT occur more than once.
-
- recur-rule-part = ( "FREQ" "=" freq )
- / ( "UNTIL" "=" enddate )
- / ( "COUNT" "=" 1*DIGIT )
- / ( "INTERVAL" "=" 1*DIGIT )
- / ( "BYSECOND" "=" byseclist )
- / ( "BYMINUTE" "=" byminlist )
- / ( "BYHOUR" "=" byhrlist )
- / ( "BYDAY" "=" bywdaylist )
- / ( "BYMONTHDAY" "=" bymodaylist )
- / ( "BYYEARDAY" "=" byyrdaylist )
- / ( "BYWEEKNO" "=" bywknolist )
- / ( "BYMONTH" "=" bymolist )
- / ( "BYSETPOS" "=" bysplist )
- / ( "WKST" "=" weekday )
-
- freq = "SECONDLY" / "MINUTELY" / "HOURLY" / "DAILY"
- / "WEEKLY" / "MONTHLY" / "YEARLY"
-
- enddate = date / date-time
-
- byseclist = ( seconds *("," seconds) )
-
- seconds = 1*2DIGIT ;0 to 60
-
- byminlist = ( minutes *("," minutes) )
-
- minutes = 1*2DIGIT ;0 to 59
-
- byhrlist = ( hour *("," hour) )
-
- hour = 1*2DIGIT ;0 to 23
-
- bywdaylist = ( weekdaynum *("," weekdaynum) )
-
- weekdaynum = [[plus / minus] ordwk] weekday
-
- plus = "+"
-
- minus = "-"
-
- ordwk = 1*2DIGIT ;1 to 53
-
- weekday = "SU" / "MO" / "TU" / "WE" / "TH" / "FR" / "SA"
- ;Corresponding to SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY,
- ;FRIDAY, and SATURDAY days of the week.
-
-
-
-Desruisseaux Standards Track [Page 39]
-
-RFC 5545 iCalendar September 2009
-
-
- bymodaylist = ( monthdaynum *("," monthdaynum) )
-
- monthdaynum = [plus / minus] ordmoday
-
- ordmoday = 1*2DIGIT ;1 to 31
-
- byyrdaylist = ( yeardaynum *("," yeardaynum) )
-
- yeardaynum = [plus / minus] ordyrday
-
- ordyrday = 1*3DIGIT ;1 to 366
-
- bywknolist = ( weeknum *("," weeknum) )
-
- weeknum = [plus / minus] ordwk
-
- bymolist = ( monthnum *("," monthnum) )
-
- monthnum = 1*2DIGIT ;1 to 12
-
- bysplist = ( setposday *("," setposday) )
-
- setposday = yeardaynum
-
- Description: This value type is a structured value consisting of a
- list of one or more recurrence grammar parts. Each rule part is
- defined by a NAME=VALUE pair. The rule parts are separated from
- each other by the SEMICOLON character. The rule parts are not
- ordered in any particular sequence. Individual rule parts MUST
- only be specified once. Compliant applications MUST accept rule
- parts ordered in any sequence, but to ensure backward
- compatibility with applications that pre-date this revision of
- iCalendar the FREQ rule part MUST be the first rule part specified
- in a RECUR value.
-
- The FREQ rule part identifies the type of recurrence rule. This
- rule part MUST be specified in the recurrence rule. Valid values
- include SECONDLY, to specify repeating events based on an interval
- of a second or more; MINUTELY, to specify repeating events based
- on an interval of a minute or more; HOURLY, to specify repeating
- events based on an interval of an hour or more; DAILY, to specify
- repeating events based on an interval of a day or more; WEEKLY, to
- specify repeating events based on an interval of a week or more;
- MONTHLY, to specify repeating events based on an interval of a
- month or more; and YEARLY, to specify repeating events based on an
- interval of a year or more.
-
-
-
-
-
-Desruisseaux Standards Track [Page 40]
-
-RFC 5545 iCalendar September 2009
-
-
- The INTERVAL rule part contains a positive integer representing at
- which intervals the recurrence rule repeats. The default value is
- "1", meaning every second for a SECONDLY rule, every minute for a
- MINUTELY rule, every hour for an HOURLY rule, every day for a
- DAILY rule, every week for a WEEKLY rule, every month for a
- MONTHLY rule, and every year for a YEARLY rule. For example,
- within a DAILY rule, a value of "8" means every eight days.
-
- The UNTIL rule part defines a DATE or DATE-TIME value that bounds
- the recurrence rule in an inclusive manner. If the value
- specified by UNTIL is synchronized with the specified recurrence,
- this DATE or DATE-TIME becomes the last instance of the
- recurrence. The value of the UNTIL rule part MUST have the same
- value type as the "DTSTART" property. Furthermore, if the
- "DTSTART" property is specified as a date with local time, then
- the UNTIL rule part MUST also be specified as a date with local
- time. If the "DTSTART" property is specified as a date with UTC
- time or a date with local time and time zone reference, then the
- UNTIL rule part MUST be specified as a date with UTC time. In the
- case of the "STANDARD" and "DAYLIGHT" sub-components the UNTIL
- rule part MUST always be specified as a date with UTC time. If
- specified as a DATE-TIME value, then it MUST be specified in a UTC
- time format. If not present, and the COUNT rule part is also not
- present, the "RRULE" is considered to repeat forever.
-
- The COUNT rule part defines the number of occurrences at which to
- range-bound the recurrence. The "DTSTART" property value always
- counts as the first occurrence.
-
- The BYSECOND rule part specifies a COMMA-separated list of seconds
- within a minute. Valid values are 0 to 60. The BYMINUTE rule
- part specifies a COMMA-separated list of minutes within an hour.
- Valid values are 0 to 59. The BYHOUR rule part specifies a COMMA-
- separated list of hours of the day. Valid values are 0 to 23.
- The BYSECOND, BYMINUTE and BYHOUR rule parts MUST NOT be specified
- when the associated "DTSTART" property has a DATE value type.
- These rule parts MUST be ignored in RECUR value that violate the
- above requirement (e.g., generated by applications that pre-date
- this revision of iCalendar).
-
- The BYDAY rule part specifies a COMMA-separated list of days of
- the week; SU indicates Sunday; MO indicates Monday; TU indicates
- Tuesday; WE indicates Wednesday; TH indicates Thursday; FR
- indicates Friday; and SA indicates Saturday.
-
- Each BYDAY value can also be preceded by a positive (+n) or
- negative (-n) integer. If present, this indicates the nth
- occurrence of a specific day within the MONTHLY or YEARLY "RRULE".
-
-
-
-Desruisseaux Standards Track [Page 41]
-
-RFC 5545 iCalendar September 2009
-
-
- For example, within a MONTHLY rule, +1MO (or simply 1MO)
- represents the first Monday within the month, whereas -1MO
- represents the last Monday of the month. The numeric value in a
- BYDAY rule part with the FREQ rule part set to YEARLY corresponds
- to an offset within the month when the BYMONTH rule part is
- present, and corresponds to an offset within the year when the
- BYWEEKNO or BYMONTH rule parts are present. If an integer
- modifier is not present, it means all days of this type within the
- specified frequency. For example, within a MONTHLY rule, MO
- represents all Mondays within the month. The BYDAY rule part MUST
- NOT be specified with a numeric value when the FREQ rule part is
- not set to MONTHLY or YEARLY. Furthermore, the BYDAY rule part
- MUST NOT be specified with a numeric value with the FREQ rule part
- set to YEARLY when the BYWEEKNO rule part is specified.
-
- The BYMONTHDAY rule part specifies a COMMA-separated list of days
- of the month. Valid values are 1 to 31 or -31 to -1. For
- example, -10 represents the tenth to the last day of the month.
- The BYMONTHDAY rule part MUST NOT be specified when the FREQ rule
- part is set to WEEKLY.
-
- The BYYEARDAY rule part specifies a COMMA-separated list of days
- of the year. Valid values are 1 to 366 or -366 to -1. For
- example, -1 represents the last day of the year (December 31st)
- and -306 represents the 306th to the last day of the year (March
- 1st). The BYYEARDAY rule part MUST NOT be specified when the FREQ
- rule part is set to DAILY, WEEKLY, or MONTHLY.
-
- The BYWEEKNO rule part specifies a COMMA-separated list of
- ordinals specifying weeks of the year. Valid values are 1 to 53
- or -53 to -1. This corresponds to weeks according to week
- numbering as defined in [ISO.8601.2004]. A week is defined as a
- seven day period, starting on the day of the week defined to be
- the week start (see WKST). Week number one of the calendar year
- is the first week that contains at least four (4) days in that
- calendar year. This rule part MUST NOT be used when the FREQ rule
- part is set to anything other than YEARLY. For example, 3
- represents the third week of the year.
-
- Note: Assuming a Monday week start, week 53 can only occur when
- Thursday is January 1 or if it is a leap year and Wednesday is
- January 1.
-
- The BYMONTH rule part specifies a COMMA-separated list of months
- of the year. Valid values are 1 to 12.
-
- The WKST rule part specifies the day on which the workweek starts.
- Valid values are MO, TU, WE, TH, FR, SA, and SU. This is
-
-
-
-Desruisseaux Standards Track [Page 42]
-
-RFC 5545 iCalendar September 2009
-
-
- significant when a WEEKLY "RRULE" has an interval greater than 1,
- and a BYDAY rule part is specified. This is also significant when
- in a YEARLY "RRULE" when a BYWEEKNO rule part is specified. The
- default value is MO.
-
- The BYSETPOS rule part specifies a COMMA-separated list of values
- that corresponds to the nth occurrence within the set of
- recurrence instances specified by the rule. BYSETPOS operates on
- a set of recurrence instances in one interval of the recurrence
- rule. For example, in a WEEKLY rule, the interval would be one
- week A set of recurrence instances starts at the beginning of the
- interval defined by the FREQ rule part. Valid values are 1 to 366
- or -366 to -1. It MUST only be used in conjunction with another
- BYxxx rule part. For example "the last work day of the month"
- could be represented as:
-
- FREQ=MONTHLY;BYDAY=MO,TU,WE,TH,FR;BYSETPOS=-1
-
- Each BYSETPOS value can include a positive (+n) or negative (-n)
- integer. If present, this indicates the nth occurrence of the
- specific occurrence within the set of occurrences specified by the
- rule.
-
- Recurrence rules may generate recurrence instances with an invalid
- date (e.g., February 30) or nonexistent local time (e.g., 1:30 AM
- on a day where the local time is moved forward by an hour at 1:00
- AM). Such recurrence instances MUST be ignored and MUST NOT be
- counted as part of the recurrence set.
-
- Information, not contained in the rule, necessary to determine the
- various recurrence instance start time and dates are derived from
- the Start Time ("DTSTART") component attribute. For example,
- "FREQ=YEARLY;BYMONTH=1" doesn't specify a specific day within the
- month or a time. This information would be the same as what is
- specified for "DTSTART".
-
- BYxxx rule parts modify the recurrence in some manner. BYxxx rule
- parts for a period of time that is the same or greater than the
- frequency generally reduce or limit the number of occurrences of
- the recurrence generated. For example, "FREQ=DAILY;BYMONTH=1"
- reduces the number of recurrence instances from all days (if
- BYMONTH rule part is not present) to all days in January. BYxxx
- rule parts for a period of time less than the frequency generally
- increase or expand the number of occurrences of the recurrence.
- For example, "FREQ=YEARLY;BYMONTH=1,2" increases the number of
- days within the yearly recurrence set from 1 (if BYMONTH rule part
- is not present) to 2.
-
-
-
-
-Desruisseaux Standards Track [Page 43]
-
-RFC 5545 iCalendar September 2009
-
-
- If multiple BYxxx rule parts are specified, then after evaluating
- the specified FREQ and INTERVAL rule parts, the BYxxx rule parts
- are applied to the current set of evaluated occurrences in the
- following order: BYMONTH, BYWEEKNO, BYYEARDAY, BYMONTHDAY, BYDAY,
- BYHOUR, BYMINUTE, BYSECOND and BYSETPOS; then COUNT and UNTIL are
- evaluated.
-
- The table below summarizes the dependency of BYxxx rule part
- expand or limit behavior on the FREQ rule part value.
-
- The term "N/A" means that the corresponding BYxxx rule part MUST
- NOT be used with the corresponding FREQ value.
-
- BYDAY has some special behavior depending on the FREQ value and
- this is described in separate notes below the table.
-
- +----------+--------+--------+-------+-------+------+-------+------+
- | |SECONDLY|MINUTELY|HOURLY |DAILY |WEEKLY|MONTHLY|YEARLY|
- +----------+--------+--------+-------+-------+------+-------+------+
- |BYMONTH |Limit |Limit |Limit |Limit |Limit |Limit |Expand|
- +----------+--------+--------+-------+-------+------+-------+------+
- |BYWEEKNO |N/A |N/A |N/A |N/A |N/A |N/A |Expand|
- +----------+--------+--------+-------+-------+------+-------+------+
- |BYYEARDAY |Limit |Limit |Limit |N/A |N/A |N/A |Expand|
- +----------+--------+--------+-------+-------+------+-------+------+
- |BYMONTHDAY|Limit |Limit |Limit |Limit |N/A |Expand |Expand|
- +----------+--------+--------+-------+-------+------+-------+------+
- |BYDAY |Limit |Limit |Limit |Limit |Expand|Note 1 |Note 2|
- +----------+--------+--------+-------+-------+------+-------+------+
- |BYHOUR |Limit |Limit |Limit |Expand |Expand|Expand |Expand|
- +----------+--------+--------+-------+-------+------+-------+------+
- |BYMINUTE |Limit |Limit |Expand |Expand |Expand|Expand |Expand|
- +----------+--------+--------+-------+-------+------+-------+------+
- |BYSECOND |Limit |Expand |Expand |Expand |Expand|Expand |Expand|
- +----------+--------+--------+-------+-------+------+-------+------+
- |BYSETPOS |Limit |Limit |Limit |Limit |Limit |Limit |Limit |
- +----------+--------+--------+-------+-------+------+-------+------+
-
- Note 1: Limit if BYMONTHDAY is present; otherwise, special expand
- for MONTHLY.
-
- Note 2: Limit if BYYEARDAY or BYMONTHDAY is present; otherwise,
- special expand for WEEKLY if BYWEEKNO present; otherwise,
- special expand for MONTHLY if BYMONTH present; otherwise,
- special expand for YEARLY.
-
-
-
-
-
-
-Desruisseaux Standards Track [Page 44]
-
-RFC 5545 iCalendar September 2009
-
-
- Here is an example of evaluating multiple BYxxx rule parts.
-
- DTSTART;TZID=America/New_York:19970105T083000
- RRULE:FREQ=YEARLY;INTERVAL=2;BYMONTH=1;BYDAY=SU;BYHOUR=8,9;
- BYMINUTE=30
-
- First, the "INTERVAL=2" would be applied to "FREQ=YEARLY" to
- arrive at "every other year". Then, "BYMONTH=1" would be applied
- to arrive at "every January, every other year". Then, "BYDAY=SU"
- would be applied to arrive at "every Sunday in January, every
- other year". Then, "BYHOUR=8,9" would be applied to arrive at
- "every Sunday in January at 8 AM and 9 AM, every other year".
- Then, "BYMINUTE=30" would be applied to arrive at "every Sunday in
- January at 8:30 AM and 9:30 AM, every other year". Then, lacking
- information from "RRULE", the second is derived from "DTSTART", to
- end up in "every Sunday in January at 8:30:00 AM and 9:30:00 AM,
- every other year". Similarly, if the BYMINUTE, BYHOUR, BYDAY,
- BYMONTHDAY, or BYMONTH rule part were missing, the appropriate
- minute, hour, day, or month would have been retrieved from the
- "DTSTART" property.
-
- If the computed local start time of a recurrence instance does not
- exist, or occurs more than once, for the specified time zone, the
- time of the recurrence instance is interpreted in the same manner
- as an explicit DATE-TIME value describing that date and time, as
- specified in Section 3.3.5.
-
- No additional content value encoding (i.e., BACKSLASH character
- encoding, see Section 3.3.11) is defined for this value type.
-
- Example: The following is a rule that specifies 10 occurrences that
- occur every other day:
-
- FREQ=DAILY;COUNT=10;INTERVAL=2
-
- There are other examples specified in Section 3.8.5.3.
-
-3.3.11. Text
-
- Value Name: TEXT
-
- Purpose: This value type is used to identify values that contain
- human-readable text.
-
- Format Definition: This value type is defined by the following
- notation:
-
-
-
-
-
-Desruisseaux Standards Track [Page 45]
-
-RFC 5545 iCalendar September 2009
-
-
- text = *(TSAFE-CHAR / ":" / DQUOTE / ESCAPED-CHAR)
- ; Folded according to description above
-
- ESCAPED-CHAR = ("\\" / "\;" / "\," / "\N" / "\n")
- ; \\ encodes \, \N or \n encodes newline
- ; \; encodes ;, \, encodes ,
-
- TSAFE-CHAR = WSP / %x21 / %x23-2B / %x2D-39 / %x3C-5B /
- %x5D-7E / NON-US-ASCII
- ; Any character except CONTROLs not needed by the current
- ; character set, DQUOTE, ";", ":", "\", ","
-
- Description: If the property permits, multiple TEXT values are
- specified by a COMMA-separated list of values.
-
- The language in which the text is represented can be controlled by
- the "LANGUAGE" property parameter.
-
- An intentional formatted text line break MUST only be included in
- a "TEXT" property value by representing the line break with the
- character sequence of BACKSLASH, followed by a LATIN SMALL LETTER
- N or a LATIN CAPITAL LETTER N, that is "\n" or "\N".
-
- The "TEXT" property values may also contain special characters
- that are used to signify delimiters, such as a COMMA character for
- lists of values or a SEMICOLON character for structured values.
- In order to support the inclusion of these special characters in
- "TEXT" property values, they MUST be escaped with a BACKSLASH
- character. A BACKSLASH character in a "TEXT" property value MUST
- be escaped with another BACKSLASH character. A COMMA character in
- a "TEXT" property value MUST be escaped with a BACKSLASH
- character. A SEMICOLON character in a "TEXT" property value MUST
- be escaped with a BACKSLASH character. However, a COLON character
- in a "TEXT" property value SHALL NOT be escaped with a BACKSLASH
- character.
-
- Example: A multiple line value of:
-
- Project XYZ Final Review
- Conference Room - 3B
- Come Prepared.
-
- would be represented as:
-
- Project XYZ Final Review\nConference Room - 3B\nCome Prepared.
-
-
-
-
-
-
-Desruisseaux Standards Track [Page 46]
-
-RFC 5545 iCalendar September 2009
-
-
-3.3.12. Time
-
- Value Name: TIME
-
- Purpose: This value type is used to identify values that contain a
- time of day.
-
- Format Definition: This value type is defined by the following
- notation:
-
- time = time-hour time-minute time-second [time-utc]
-
- time-hour = 2DIGIT ;00-23
- time-minute = 2DIGIT ;00-59
- time-second = 2DIGIT ;00-60
- ;The "60" value is used to account for positive "leap" seconds.
-
- time-utc = "Z"
-
- Description: If the property permits, multiple "time" values are
- specified by a COMMA-separated list of values. No additional
- content value encoding (i.e., BACKSLASH character encoding, see
- Section 3.3.11) is defined for this value type.
-
- The "TIME" value type is used to identify values that contain a
- time of day. The format is based on the [ISO.8601.2004] complete
- representation, basic format for a time of day. The text format
- consists of a two-digit, 24-hour of the day (i.e., values 00-23),
- two-digit minute in the hour (i.e., values 00-59), and two-digit
- seconds in the minute (i.e., values 00-60). The seconds value of
- 60 MUST only be used to account for positive "leap" seconds.
- Fractions of a second are not supported by this format.
-
- In parallel to the "DATE-TIME" definition above, the "TIME" value
- type expresses time values in three forms:
-
- The form of time with UTC offset MUST NOT be used. For example,
- the following is not valid for a time value:
-
- 230000-0800 ;Invalid time format
-
- FORM #1 LOCAL TIME
-
- The local time form is simply a time value that does not contain
- the UTC designator nor does it reference a time zone. For
- example, 11:00 PM:
-
- 230000
-
-
-
-Desruisseaux Standards Track [Page 47]
-
-RFC 5545 iCalendar September 2009
-
-
- Time values of this type are said to be "floating" and are not
- bound to any time zone in particular. They are used to represent
- the same hour, minute, and second value regardless of which time
- zone is currently being observed. For example, an event can be
- defined that indicates that an individual will be busy from 11:00
- AM to 1:00 PM every day, no matter which time zone the person is
- in. In these cases, a local time can be specified. The recipient
- of an iCalendar object with a property value consisting of a local
- time, without any relative time zone information, SHOULD interpret
- the value as being fixed to whatever time zone the "ATTENDEE" is
- in at any given moment. This means that two "Attendees", may
- participate in the same event at different UTC times; floating
- time SHOULD only be used where that is reasonable behavior.
-
- In most cases, a fixed time is desired. To properly communicate a
- fixed time in a property value, either UTC time or local time with
- time zone reference MUST be specified.
-
- The use of local time in a TIME value without the "TZID" property
- parameter is to be interpreted as floating time, regardless of the
- existence of "VTIMEZONE" calendar components in the iCalendar
- object.
-
- FORM #2: UTC TIME
-
- UTC time, or absolute time, is identified by a LATIN CAPITAL
- LETTER Z suffix character, the UTC designator, appended to the
- time value. For example, the following represents 07:00 AM UTC:
-
- 070000Z
-
- The "TZID" property parameter MUST NOT be applied to TIME
- properties whose time values are specified in UTC.
-
- FORM #3: LOCAL TIME AND TIME ZONE REFERENCE
-
- The local time with reference to time zone information form is
- identified by the use the "TZID" property parameter to reference
- the appropriate time zone definition. "TZID" is discussed in
- detail in Section 3.2.19.
-
- Example: The following represents 8:30 AM in New York in winter,
- five hours behind UTC, in each of the three formats:
-
- 083000
- 133000Z
- TZID=America/New_York:083000
-
-
-
-
-Desruisseaux Standards Track [Page 48]
-
-RFC 5545 iCalendar September 2009
-
-
-3.3.13. URI
-
- Value Name: URI
-
- Purpose: This value type is used to identify values that contain a
- uniform resource identifier (URI) type of reference to the
- property value.
-
- Format Definition: This value type is defined by the following
- notation:
-
- uri =
-
- Description: This value type might be used to reference binary
- information, for values that are large, or otherwise undesirable
- to include directly in the iCalendar object.
-
- Property values with this value type MUST follow the generic URI
- syntax defined in [RFC3986].
-
- When a property parameter value is a URI value type, the URI MUST
- be specified as a quoted-string value.
-
- No additional content value encoding (i.e., BACKSLASH character
- encoding, see Section 3.3.11) is defined for this value type.
-
- Example: The following is a URI for a network file:
-
- http://example.com/my-report.txt
-
-3.3.14. UTC Offset
-
- Value Name: UTC-OFFSET
-
- Purpose: This value type is used to identify properties that contain
- an offset from UTC to local time.
-
- Format Definition: This value type is defined by the following
- notation:
-
- utc-offset = time-numzone
-
- time-numzone = ("+" / "-") time-hour time-minute [time-second]
-
- Description: The PLUS SIGN character MUST be specified for positive
- UTC offsets (i.e., ahead of UTC). The HYPHEN-MINUS character MUST
- be specified for negative UTC offsets (i.e., behind of UTC). The
-
-
-
-
-Desruisseaux Standards Track [Page 49]
-
-RFC 5545 iCalendar September 2009
-
-
- value of "-0000" and "-000000" are not allowed. The time-second,
- if present, MUST NOT be 60; if absent, it defaults to zero.
-
- No additional content value encoding (i.e., BACKSLASH character
- encoding, see Section 3.3.11) is defined for this value type.
-
- Example: The following UTC offsets are given for standard time for
- New York (five hours behind UTC) and Geneva (one hour ahead of
- UTC):
-
- -0500
-
- +0100
-
-3.4. iCalendar Object
-
- The Calendaring and Scheduling Core Object is a collection of
- calendaring and scheduling information. Typically, this information
- will consist of an iCalendar stream with a single iCalendar object.
- However, multiple iCalendar objects can be sequentially grouped
- together in an iCalendar stream. The first line and last line of the
- iCalendar object MUST contain a pair of iCalendar object delimiter
- strings. The syntax for an iCalendar stream is as follows:
-
- icalstream = 1*icalobject
-
- icalobject = "BEGIN" ":" "VCALENDAR" CRLF
- icalbody
- "END" ":" "VCALENDAR" CRLF
-
- The following is a simple example of an iCalendar object:
-
- BEGIN:VCALENDAR
- VERSION:2.0
- PRODID:-//hacksw/handcal//NONSGML v1.0//EN
- BEGIN:VEVENT
- UID:19970610T172345Z-AF23B2@example.com
- DTSTAMP:19970610T172345Z
- DTSTART:19970714T170000Z
- DTEND:19970715T040000Z
- SUMMARY:Bastille Day Party
- END:VEVENT
- END:VCALENDAR
-
-
-
-
-
-
-
-
-Desruisseaux Standards Track [Page 50]
-
-RFC 5545 iCalendar September 2009
-
-
-3.5. Property
-
- A property is the definition of an individual attribute describing a
- calendar object or a calendar component. A property takes the form
- defined by the "contentline" notation defined in Section 3.1.
-
- The following is an example of a property:
-
- DTSTART:19960415T133000Z
-
- This memo imposes no ordering of properties within an iCalendar
- object.
-
- Property names, parameter names, and enumerated parameter values are
- case-insensitive. For example, the property name "DUE" is the same
- as "due" and "Due", DTSTART;TZID=America/New_York:19980714T120000 is
- the same as DtStart;TzID=America/New_York:19980714T120000.
-
-3.6. Calendar Components
-
- The body of the iCalendar object consists of a sequence of calendar
- properties and one or more calendar components. The calendar
- properties are attributes that apply to the calendar object as a
- whole. The calendar components are collections of properties that
- express a particular calendar semantic. For example, the calendar
- component can specify an event, a to-do, a journal entry, time zone
- information, free/busy time information, or an alarm.
-
- The body of the iCalendar object is defined by the following
- notation:
-
- icalbody = calprops component
-
- calprops = *(
- ;
- ; The following are REQUIRED,
- ; but MUST NOT occur more than once.
- ;
- prodid / version /
- ;
- ; The following are OPTIONAL,
- ; but MUST NOT occur more than once.
- ;
- calscale / method /
- ;
- ; The following are OPTIONAL,
- ; and MAY occur more than once.
- ;
-
-
-
-Desruisseaux Standards Track [Page 51]
-
-RFC 5545 iCalendar September 2009
-
-
- x-prop / iana-prop
- ;
- )
-
- component = 1*(eventc / todoc / journalc / freebusyc /
- timezonec / iana-comp / x-comp)
-
- iana-comp = "BEGIN" ":" iana-token CRLF
- 1*contentline
- "END" ":" iana-token CRLF
-
- x-comp = "BEGIN" ":" x-name CRLF
- 1*contentline
- "END" ":" x-name CRLF
-
- An iCalendar object MUST include the "PRODID" and "VERSION" calendar
- properties. In addition, it MUST include at least one calendar
- component. Special forms of iCalendar objects are possible to
- publish just busy time (i.e., only a "VFREEBUSY" calendar component)
- or time zone (i.e., only a "VTIMEZONE" calendar component)
- information. In addition, a complex iCalendar object that is used to
- capture a complete snapshot of the contents of a calendar is possible
- (e.g., composite of many different calendar components). More
- commonly, an iCalendar object will consist of just a single "VEVENT",
- "VTODO", or "VJOURNAL" calendar component. Applications MUST ignore
- x-comp and iana-comp values they don't recognize. Applications that
- support importing iCalendar objects SHOULD support all of the
- component types defined in this document, and SHOULD NOT silently
- drop any components as that can lead to user data loss.
-
-3.6.1. Event Component
-
- Component Name: VEVENT
-
- Purpose: Provide a grouping of component properties that describe an
- event.
-
- Format Definition: A "VEVENT" calendar component is defined by the
- following notation:
-
- eventc = "BEGIN" ":" "VEVENT" CRLF
- eventprop *alarmc
- "END" ":" "VEVENT" CRLF
-
- eventprop = *(
- ;
- ; The following are REQUIRED,
- ; but MUST NOT occur more than once.
-
-
-
-Desruisseaux Standards Track [Page 52]
-
-RFC 5545 iCalendar September 2009
-
-
- ;
- dtstamp / uid /
- ;
- ; The following is REQUIRED if the component
- ; appears in an iCalendar object that doesn't
- ; specify the "METHOD" property; otherwise, it
- ; is OPTIONAL; in any case, it MUST NOT occur
- ; more than once.
- ;
- dtstart /
- ;
- ; The following are OPTIONAL,
- ; but MUST NOT occur more than once.
- ;
- class / created / description / geo /
- last-mod / location / organizer / priority /
- seq / status / summary / transp /
- url / recurid /
- ;
- ; The following is OPTIONAL,
- ; but SHOULD NOT occur more than once.
- ;
- rrule /
- ;
- ; Either 'dtend' or 'duration' MAY appear in
- ; a 'eventprop', but 'dtend' and 'duration'
- ; MUST NOT occur in the same 'eventprop'.
- ;
- dtend / duration /
- ;
- ; The following are OPTIONAL,
- ; and MAY occur more than once.
- ;
- attach / attendee / categories / comment /
- contact / exdate / rstatus / related /
- resources / rdate / x-prop / iana-prop
- ;
- )
-
- Description: A "VEVENT" calendar component is a grouping of
- component properties, possibly including "VALARM" calendar
- components, that represents a scheduled amount of time on a
- calendar. For example, it can be an activity; such as a one-hour
- long, department meeting from 8:00 AM to 9:00 AM, tomorrow.
- Generally, an event will take up time on an individual calendar.
- Hence, the event will appear as an opaque interval in a search for
- busy time. Alternately, the event can have its Time Transparency
-
-
-
-
-Desruisseaux Standards Track [Page 53]
-
-RFC 5545 iCalendar September 2009
-
-
- set to "TRANSPARENT" in order to prevent blocking of the event in
- searches for busy time.
-
- The "VEVENT" is also the calendar component used to specify an
- anniversary or daily reminder within a calendar. These events
- have a DATE value type for the "DTSTART" property instead of the
- default value type of DATE-TIME. If such a "VEVENT" has a "DTEND"
- property, it MUST be specified as a DATE value also. The
- anniversary type of "VEVENT" can span more than one date (i.e.,
- "DTEND" property value is set to a calendar date after the
- "DTSTART" property value). If such a "VEVENT" has a "DURATION"
- property, it MUST be specified as a "dur-day" or "dur-week" value.
-
- The "DTSTART" property for a "VEVENT" specifies the inclusive
- start of the event. For recurring events, it also specifies the
- very first instance in the recurrence set. The "DTEND" property
- for a "VEVENT" calendar component specifies the non-inclusive end
- of the event. For cases where a "VEVENT" calendar component
- specifies a "DTSTART" property with a DATE value type but no
- "DTEND" nor "DURATION" property, the event's duration is taken to
- be one day. For cases where a "VEVENT" calendar component
- specifies a "DTSTART" property with a DATE-TIME value type but no
- "DTEND" property, the event ends on the same calendar date and
- time of day specified by the "DTSTART" property.
-
- The "VEVENT" calendar component cannot be nested within another
- calendar component. However, "VEVENT" calendar components can be
- related to each other or to a "VTODO" or to a "VJOURNAL" calendar
- component with the "RELATED-TO" property.
-
- Example: The following is an example of the "VEVENT" calendar
- component used to represent a meeting that will also be opaque to
- searches for busy time:
-
- BEGIN:VEVENT
- UID:19970901T130000Z-123401@example.com
- DTSTAMP:19970901T130000Z
- DTSTART:19970903T163000Z
- DTEND:19970903T190000Z
- SUMMARY:Annual Employee Review
- CLASS:PRIVATE
- CATEGORIES:BUSINESS,HUMAN RESOURCES
- END:VEVENT
-
- The following is an example of the "VEVENT" calendar component
- used to represent a reminder that will not be opaque, but rather
- transparent, to searches for busy time:
-
-
-
-
-Desruisseaux Standards Track [Page 54]
-
-RFC 5545 iCalendar September 2009
-
-
- BEGIN:VEVENT
- UID:19970901T130000Z-123402@example.com
- DTSTAMP:19970901T130000Z
- DTSTART:19970401T163000Z
- DTEND:19970402T010000Z
- SUMMARY:Laurel is in sensitivity awareness class.
- CLASS:PUBLIC
- CATEGORIES:BUSINESS,HUMAN RESOURCES
- TRANSP:TRANSPARENT
- END:VEVENT
-
- The following is an example of the "VEVENT" calendar component
- used to represent an anniversary that will occur annually:
-
- BEGIN:VEVENT
- UID:19970901T130000Z-123403@example.com
- DTSTAMP:19970901T130000Z
- DTSTART;VALUE=DATE:19971102
- SUMMARY:Our Blissful Anniversary
- TRANSP:TRANSPARENT
- CLASS:CONFIDENTIAL
- CATEGORIES:ANNIVERSARY,PERSONAL,SPECIAL OCCASION
- RRULE:FREQ=YEARLY
- END:VEVENT
-
- The following is an example of the "VEVENT" calendar component
- used to represent a multi-day event scheduled from June 28th, 2007
- to July 8th, 2007 inclusively. Note that the "DTEND" property is
- set to July 9th, 2007, since the "DTEND" property specifies the
- non-inclusive end of the event.
-
- BEGIN:VEVENT
- UID:20070423T123432Z-541111@example.com
- DTSTAMP:20070423T123432Z
- DTSTART;VALUE=DATE:20070628
- DTEND;VALUE=DATE:20070709
- SUMMARY:Festival International de Jazz de Montreal
- TRANSP:TRANSPARENT
- END:VEVENT
-
-3.6.2. To-Do Component
-
- Component Name: VTODO
-
- Purpose: Provide a grouping of calendar properties that describe a
- to-do.
-
-
-
-
-
-Desruisseaux Standards Track [Page 55]
-
-RFC 5545 iCalendar September 2009
-
-
- Format Definition: A "VTODO" calendar component is defined by the
- following notation:
-
- todoc = "BEGIN" ":" "VTODO" CRLF
- todoprop *alarmc
- "END" ":" "VTODO" CRLF
-
- todoprop = *(
- ;
- ; The following are REQUIRED,
- ; but MUST NOT occur more than once.
- ;
- dtstamp / uid /
- ;
- ; The following are OPTIONAL,
- ; but MUST NOT occur more than once.
- ;
- class / completed / created / description /
- dtstart / geo / last-mod / location / organizer /
- percent / priority / recurid / seq / status /
- summary / url /
- ;
- ; The following is OPTIONAL,
- ; but SHOULD NOT occur more than once.
- ;
- rrule /
- ;
- ; Either 'due' or 'duration' MAY appear in
- ; a 'todoprop', but 'due' and 'duration'
- ; MUST NOT occur in the same 'todoprop'.
- ; If 'duration' appear in a 'todoprop',
- ; then 'dtstart' MUST also appear in
- ; the same 'todoprop'.
- ;
- due / duration /
- ;
- ; The following are OPTIONAL,
- ; and MAY occur more than once.
- ;
- attach / attendee / categories / comment / contact /
- exdate / rstatus / related / resources /
- rdate / x-prop / iana-prop
- ;
- )
-
- Description: A "VTODO" calendar component is a grouping of component
- properties and possibly "VALARM" calendar components that
- represent an action-item or assignment. For example, it can be
-
-
-
-Desruisseaux Standards Track [Page 56]
-
-RFC 5545 iCalendar September 2009
-
-
- used to represent an item of work assigned to an individual; such
- as "turn in travel expense today".
-
- The "VTODO" calendar component cannot be nested within another
- calendar component. However, "VTODO" calendar components can be
- related to each other or to a "VEVENT" or to a "VJOURNAL" calendar
- component with the "RELATED-TO" property.
-
- A "VTODO" calendar component without the "DTSTART" and "DUE" (or
- "DURATION") properties specifies a to-do that will be associated
- with each successive calendar date, until it is completed.
-
- Examples: The following is an example of a "VTODO" calendar
- component that needs to be completed before May 1st, 2007. On
- midnight May 1st, 2007 this to-do would be considered overdue.
-
- BEGIN:VTODO
- UID:20070313T123432Z-456553@example.com
- DTSTAMP:20070313T123432Z
- DUE;VALUE=DATE:20070501
- SUMMARY:Submit Quebec Income Tax Return for 2006
- CLASS:CONFIDENTIAL
- CATEGORIES:FAMILY,FINANCE
- STATUS:NEEDS-ACTION
- END:VTODO
-
- The following is an example of a "VTODO" calendar component that
- was due before 1:00 P.M. UTC on July 9th, 2007 and was completed
- on July 7th, 2007 at 10:00 A.M. UTC.
-
- BEGIN:VTODO
- UID:20070514T103211Z-123404@example.com
- DTSTAMP:20070514T103211Z
- DTSTART:20070514T110000Z
- DUE:20070709T130000Z
- COMPLETED:20070707T100000Z
- SUMMARY:Submit Revised Internet-Draft
- PRIORITY:1
- STATUS:NEEDS-ACTION
- END:VTODO
-
-3.6.3. Journal Component
-
- Component Name: VJOURNAL
-
- Purpose: Provide a grouping of component properties that describe a
- journal entry.
-
-
-
-
-Desruisseaux Standards Track [Page 57]
-
-RFC 5545 iCalendar September 2009
-
-
- Format Definition: A "VJOURNAL" calendar component is defined by the
- following notation:
-
- journalc = "BEGIN" ":" "VJOURNAL" CRLF
- jourprop
- "END" ":" "VJOURNAL" CRLF
-
- jourprop = *(
- ;
- ; The following are REQUIRED,
- ; but MUST NOT occur more than once.
- ;
- dtstamp / uid /
- ;
- ; The following are OPTIONAL,
- ; but MUST NOT occur more than once.
- ;
- class / created / dtstart /
- last-mod / organizer / recurid / seq /
- status / summary / url /
- ;
- ; The following is OPTIONAL,
- ; but SHOULD NOT occur more than once.
- ;
- rrule /
- ;
- ; The following are OPTIONAL,
- ; and MAY occur more than once.
- ;
- attach / attendee / categories / comment /
- contact / description / exdate / related / rdate /
- rstatus / x-prop / iana-prop
- ;
- )
-
- Description: A "VJOURNAL" calendar component is a grouping of
- component properties that represent one or more descriptive text
- notes associated with a particular calendar date. The "DTSTART"
- property is used to specify the calendar date with which the
- journal entry is associated. Generally, it will have a DATE value
- data type, but it can also be used to specify a DATE-TIME value
- data type. Examples of a journal entry include a daily record of
- a legislative body or a journal entry of individual telephone
- contacts for the day or an ordered list of accomplishments for the
- day. The "VJOURNAL" calendar component can also be used to
- associate a document with a calendar date.
-
-
-
-
-
-Desruisseaux Standards Track [Page 58]
-
-RFC 5545 iCalendar September 2009
-
-
- The "VJOURNAL" calendar component does not take up time on a
- calendar. Hence, it does not play a role in free or busy time
- searches -- it is as though it has a time transparency value of
- TRANSPARENT. It is transparent to any such searches.
-
- The "VJOURNAL" calendar component cannot be nested within another
- calendar component. However, "VJOURNAL" calendar components can
- be related to each other or to a "VEVENT" or to a "VTODO" calendar
- component, with the "RELATED-TO" property.
-
- Example: The following is an example of the "VJOURNAL" calendar
- component:
-
- BEGIN:VJOURNAL
- UID:19970901T130000Z-123405@example.com
- DTSTAMP:19970901T130000Z
- DTSTART;VALUE=DATE:19970317
- SUMMARY:Staff meeting minutes
- DESCRIPTION:1. Staff meeting: Participants include Joe\,
- Lisa\, and Bob. Aurora project plans were reviewed.
- There is currently no budget reserves for this project.
- Lisa will escalate to management. Next meeting on Tuesday.\n
- 2. Telephone Conference: ABC Corp. sales representative
- called to discuss new printer. Promised to get us a demo by
- Friday.\n3. Henry Miller (Handsoff Insurance): Car was
- totaled by tree. Is looking into a loaner car. 555-2323
- (tel).
- END:VJOURNAL
-
-3.6.4. Free/Busy Component
-
- Component Name: VFREEBUSY
-
- Purpose: Provide a grouping of component properties that describe
- either a request for free/busy time, describe a response to a
- request for free/busy time, or describe a published set of busy
- time.
-
- Format Definition: A "VFREEBUSY" calendar component is defined by
- the following notation:
-
- freebusyc = "BEGIN" ":" "VFREEBUSY" CRLF
- fbprop
- "END" ":" "VFREEBUSY" CRLF
-
- fbprop = *(
- ;
- ; The following are REQUIRED,
-
-
-
-Desruisseaux Standards Track [Page 59]
-
-RFC 5545 iCalendar September 2009
-
-
- ; but MUST NOT occur more than once.
- ;
- dtstamp / uid /
- ;
- ; The following are OPTIONAL,
- ; but MUST NOT occur more than once.
- ;
- contact / dtstart / dtend /
- organizer / url /
- ;
- ; The following are OPTIONAL,
- ; and MAY occur more than once.
- ;
- attendee / comment / freebusy / rstatus / x-prop /
- iana-prop
- ;
- )
-
- Description: A "VFREEBUSY" calendar component is a grouping of
- component properties that represents either a request for free or
- busy time information, a reply to a request for free or busy time
- information, or a published set of busy time information.
-
- When used to request free/busy time information, the "ATTENDEE"
- property specifies the calendar users whose free/busy time is
- being requested; the "ORGANIZER" property specifies the calendar
- user who is requesting the free/busy time; the "DTSTART" and
- "DTEND" properties specify the window of time for which the free/
- busy time is being requested; the "UID" and "DTSTAMP" properties
- are specified to assist in proper sequencing of multiple free/busy
- time requests.
-
- When used to reply to a request for free/busy time, the "ATTENDEE"
- property specifies the calendar user responding to the free/busy
- time request; the "ORGANIZER" property specifies the calendar user
- that originally requested the free/busy time; the "FREEBUSY"
- property specifies the free/busy time information (if it exists);
- and the "UID" and "DTSTAMP" properties are specified to assist in
- proper sequencing of multiple free/busy time replies.
-
- When used to publish busy time, the "ORGANIZER" property specifies
- the calendar user associated with the published busy time; the
- "DTSTART" and "DTEND" properties specify an inclusive time window
- that surrounds the busy time information; the "FREEBUSY" property
- specifies the published busy time information; and the "DTSTAMP"
- property specifies the DATE-TIME that iCalendar object was
- created.
-
-
-
-
-Desruisseaux Standards Track [Page 60]
-
-RFC 5545 iCalendar September 2009
-
-
- The "VFREEBUSY" calendar component cannot be nested within another
- calendar component. Multiple "VFREEBUSY" calendar components can
- be specified within an iCalendar object. This permits the
- grouping of free/busy information into logical collections, such
- as monthly groups of busy time information.
-
- The "VFREEBUSY" calendar component is intended for use in
- iCalendar object methods involving requests for free time,
- requests for busy time, requests for both free and busy, and the
- associated replies.
-
- Free/Busy information is represented with the "FREEBUSY" property.
- This property provides a terse representation of time periods.
- One or more "FREEBUSY" properties can be specified in the
- "VFREEBUSY" calendar component.
-
- When present in a "VFREEBUSY" calendar component, the "DTSTART"
- and "DTEND" properties SHOULD be specified prior to any "FREEBUSY"
- properties.
-
- The recurrence properties ("RRULE", "RDATE", "EXDATE") are not
- permitted within a "VFREEBUSY" calendar component. Any recurring
- events are resolved into their individual busy time periods using
- the "FREEBUSY" property.
-
- Example: The following is an example of a "VFREEBUSY" calendar
- component used to request free or busy time information:
-
- BEGIN:VFREEBUSY
- UID:19970901T082949Z-FA43EF@example.com
- ORGANIZER:mailto:jane_doe@example.com
- ATTENDEE:mailto:john_public@example.com
- DTSTART:19971015T050000Z
- DTEND:19971016T050000Z
- DTSTAMP:19970901T083000Z
- END:VFREEBUSY
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Desruisseaux Standards Track [Page 61]
-
-RFC 5545 iCalendar September 2009
-
-
- The following is an example of a "VFREEBUSY" calendar component
- used to reply to the request with busy time information:
-
- BEGIN:VFREEBUSY
- UID:19970901T095957Z-76A912@example.com
- ORGANIZER:mailto:jane_doe@example.com
- ATTENDEE:mailto:john_public@example.com
- DTSTAMP:19970901T100000Z
- FREEBUSY:19971015T050000Z/PT8H30M,
- 19971015T160000Z/PT5H30M,19971015T223000Z/PT6H30M
- URL:http://example.com/pub/busy/jpublic-01.ifb
- COMMENT:This iCalendar file contains busy time information for
- the next three months.
- END:VFREEBUSY
-
- The following is an example of a "VFREEBUSY" calendar component
- used to publish busy time information:
-
- BEGIN:VFREEBUSY
- UID:19970901T115957Z-76A912@example.com
- DTSTAMP:19970901T120000Z
- ORGANIZER:jsmith@example.com
- DTSTART:19980313T141711Z
- DTEND:19980410T141711Z
- FREEBUSY:19980314T233000Z/19980315T003000Z
- FREEBUSY:19980316T153000Z/19980316T163000Z
- FREEBUSY:19980318T030000Z/19980318T040000Z
- URL:http://www.example.com/calendar/busytime/jsmith.ifb
- END:VFREEBUSY
-
-3.6.5. Time Zone Component
-
- Component Name: VTIMEZONE
-
- Purpose: Provide a grouping of component properties that defines a
- time zone.
-
- Format Definition: A "VTIMEZONE" calendar component is defined by
- the following notation:
-
- timezonec = "BEGIN" ":" "VTIMEZONE" CRLF
- *(
- ;
- ; 'tzid' is REQUIRED, but MUST NOT occur more
- ; than once.
- ;
- tzid /
- ;
-
-
-
-Desruisseaux Standards Track [Page 62]
-
-RFC 5545 iCalendar September 2009
-
-
- ; 'last-mod' and 'tzurl' are OPTIONAL,
- ; but MUST NOT occur more than once.
- ;
- last-mod / tzurl /
- ;
- ; One of 'standardc' or 'daylightc' MUST occur
- ; and each MAY occur more than once.
- ;
- standardc / daylightc /
- ;
- ; The following are OPTIONAL,
- ; and MAY occur more than once.
- ;
- x-prop / iana-prop
- ;
- )
- "END" ":" "VTIMEZONE" CRLF
-
- standardc = "BEGIN" ":" "STANDARD" CRLF
- tzprop
- "END" ":" "STANDARD" CRLF
-
- daylightc = "BEGIN" ":" "DAYLIGHT" CRLF
- tzprop
- "END" ":" "DAYLIGHT" CRLF
-
- tzprop = *(
- ;
- ; The following are REQUIRED,
- ; but MUST NOT occur more than once.
- ;
- dtstart / tzoffsetto / tzoffsetfrom /
- ;
- ; The following is OPTIONAL,
- ; but SHOULD NOT occur more than once.
- ;
- rrule /
- ;
- ; The following are OPTIONAL,
- ; and MAY occur more than once.
- ;
- comment / rdate / tzname / x-prop / iana-prop
- ;
- )
-
- Description: A time zone is unambiguously defined by the set of time
- measurement rules determined by the governing body for a given
- geographic area. These rules describe, at a minimum, the base
-
-
-
-Desruisseaux Standards Track [Page 63]
-
-RFC 5545 iCalendar September 2009
-
-
- offset from UTC for the time zone, often referred to as the
- Standard Time offset. Many locations adjust their Standard Time
- forward or backward by one hour, in order to accommodate seasonal
- changes in number of daylight hours, often referred to as Daylight
- Saving Time. Some locations adjust their time by a fraction of an
- hour. Standard Time is also known as Winter Time. Daylight
- Saving Time is also known as Advanced Time, Summer Time, or Legal
- Time in certain countries. The following table shows the changes
- in time zone rules in effect for New York City starting from 1967.
- Each line represents a description or rule for a particular
- observance.
-
- Effective Observance Rule
-
- +-----------+--------------------------+--------+--------------+
- | Date | (Date-Time) | Offset | Abbreviation |
- +-----------+--------------------------+--------+--------------+
- | 1967-1973 | last Sun in Apr, 02:00 | -0400 | EDT |
- | | | | |
- | 1967-2006 | last Sun in Oct, 02:00 | -0500 | EST |
- | | | | |
- | 1974-1974 | Jan 6, 02:00 | -0400 | EDT |
- | | | | |
- | 1975-1975 | Feb 23, 02:00 | -0400 | EDT |
- | | | | |
- | 1976-1986 | last Sun in Apr, 02:00 | -0400 | EDT |
- | | | | |
- | 1987-2006 | first Sun in Apr, 02:00 | -0400 | EDT |
- | | | | |
- | 2007-* | second Sun in Mar, 02:00 | -0400 | EDT |
- | | | | |
- | 2007-* | first Sun in Nov, 02:00 | -0500 | EST |
- +-----------+--------------------------+--------+--------------+
-
- Note: The specification of a global time zone registry is not
- addressed by this document and is left for future study.
- However, implementers may find the TZ database [TZDB] a useful
- reference. It is an informal, public-domain collection of time
- zone information, which is currently being maintained by
- volunteer Internet participants, and is used in several
- operating systems. This database contains current and
- historical time zone information for a wide variety of
- locations around the globe; it provides a time zone identifier
- for every unique time zone rule set in actual use since 1970,
- with historical data going back to the introduction of standard
- time.
-
-
-
-
-
-Desruisseaux Standards Track [Page 64]
-
-RFC 5545 iCalendar September 2009
-
-
- Interoperability between two calendaring and scheduling
- applications, especially for recurring events, to-dos or journal
- entries, is dependent on the ability to capture and convey date
- and time information in an unambiguous format. The specification
- of current time zone information is integral to this behavior.
-
- If present, the "VTIMEZONE" calendar component defines the set of
- Standard Time and Daylight Saving Time observances (or rules) for
- a particular time zone for a given interval of time. The
- "VTIMEZONE" calendar component cannot be nested within other
- calendar components. Multiple "VTIMEZONE" calendar components can
- exist in an iCalendar object. In this situation, each "VTIMEZONE"
- MUST represent a unique time zone definition. This is necessary
- for some classes of events, such as airline flights, that start in
- one time zone and end in another.
-
- The "VTIMEZONE" calendar component MUST include the "TZID"
- property and at least one definition of a "STANDARD" or "DAYLIGHT"
- sub-component. The "STANDARD" or "DAYLIGHT" sub-component MUST
- include the "DTSTART", "TZOFFSETFROM", and "TZOFFSETTO"
- properties.
-
- An individual "VTIMEZONE" calendar component MUST be specified for
- each unique "TZID" parameter value specified in the iCalendar
- object. In addition, a "VTIMEZONE" calendar component, referred
- to by a recurring calendar component, MUST provide valid time zone
- information for all recurrence instances.
-
- Each "VTIMEZONE" calendar component consists of a collection of
- one or more sub-components that describe the rule for a particular
- observance (either a Standard Time or a Daylight Saving Time
- observance). The "STANDARD" sub-component consists of a
- collection of properties that describe Standard Time. The
- "DAYLIGHT" sub-component consists of a collection of properties
- that describe Daylight Saving Time. In general, this collection
- of properties consists of:
-
- * the first onset DATE-TIME for the observance;
-
- * the last onset DATE-TIME for the observance, if a last onset is
- known;
-
- * the offset to be applied for the observance;
-
- * a rule that describes the day and time when the observance
- takes effect;
-
- * an optional name for the observance.
-
-
-
-Desruisseaux Standards Track [Page 65]
-
-RFC 5545 iCalendar September 2009
-
-
- For a given time zone, there may be multiple unique definitions of
- the observances over a period of time. Each observance is
- described using either a "STANDARD" or "DAYLIGHT" sub-component.
- The collection of these sub-components is used to describe the
- time zone for a given period of time. The offset to apply at any
- given time is found by locating the observance that has the last
- onset date and time before the time in question, and using the
- offset value from that observance.
-
- The top-level properties in a "VTIMEZONE" calendar component are:
-
- The mandatory "TZID" property is a text value that uniquely
- identifies the "VTIMEZONE" calendar component within the scope of
- an iCalendar object.
-
- The optional "LAST-MODIFIED" property is a UTC value that
- specifies the date and time that this time zone definition was
- last updated.
-
- The optional "TZURL" property is a url value that points to a
- published "VTIMEZONE" definition. "TZURL" SHOULD refer to a
- resource that is accessible by anyone who might need to interpret
- the object. This SHOULD NOT normally be a "file" URL or other URL
- that is not widely accessible.
-
- The collection of properties that are used to define the
- "STANDARD" and "DAYLIGHT" sub-components include:
-
- The mandatory "DTSTART" property gives the effective onset date
- and local time for the time zone sub-component definition.
- "DTSTART" in this usage MUST be specified as a date with a local
- time value.
-
- The mandatory "TZOFFSETFROM" property gives the UTC offset that is
- in use when the onset of this time zone observance begins.
- "TZOFFSETFROM" is combined with "DTSTART" to define the effective
- onset for the time zone sub-component definition. For example,
- the following represents the time at which the observance of
- Standard Time took effect in Fall 1967 for New York City:
-
- DTSTART:19671029T020000
-
- TZOFFSETFROM:-0400
-
- The mandatory "TZOFFSETTO" property gives the UTC offset for the
- time zone sub-component (Standard Time or Daylight Saving Time)
- when this observance is in use.
-
-
-
-
-Desruisseaux Standards Track [Page 66]
-
-RFC 5545 iCalendar September 2009
-
-
- The optional "TZNAME" property is the customary name for the time
- zone. This could be used for displaying dates.
-
- The onset DATE-TIME values for the observance defined by the time
- zone sub-component is defined by the "DTSTART", "RRULE", and
- "RDATE" properties.
-
- The "RRULE" property defines the recurrence rule for the onset of
- the observance defined by this time zone sub-component. Some
- specific requirements for the usage of "RRULE" for this purpose
- include:
-
- * If observance is known to have an effective end date, the
- "UNTIL" recurrence rule parameter MUST be used to specify the
- last valid onset of this observance (i.e., the UNTIL DATE-TIME
- will be equal to the last instance generated by the recurrence
- pattern). It MUST be specified in UTC time.
-
- * The "DTSTART" and the "TZOFFSETFROM" properties MUST be used
- when generating the onset DATE-TIME values (instances) from the
- "RRULE".
-
- The "RDATE" property can also be used to define the onset of the
- observance by giving the individual onset date and times. "RDATE"
- in this usage MUST be specified as a date with local time value,
- relative to the UTC offset specified in the "TZOFFSETFROM"
- property.
-
- The optional "COMMENT" property is also allowed for descriptive
- explanatory text.
-
- Example: The following are examples of the "VTIMEZONE" calendar
- component:
-
- This is an example showing all the time zone rules for New York
- City since April 30, 1967 at 03:00:00 EDT.
-
- BEGIN:VTIMEZONE
- TZID:America/New_York
- LAST-MODIFIED:20050809T050000Z
- BEGIN:DAYLIGHT
- DTSTART:19670430T020000
- RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19730429T070000Z
- TZOFFSETFROM:-0500
- TZOFFSETTO:-0400
- TZNAME:EDT
- END:DAYLIGHT
- BEGIN:STANDARD
-
-
-
-Desruisseaux Standards Track [Page 67]
-
-RFC 5545 iCalendar September 2009
-
-
- DTSTART:19671029T020000
- RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20061029T060000Z
- TZOFFSETFROM:-0400
- TZOFFSETTO:-0500
- TZNAME:EST
- END:STANDARD
- BEGIN:DAYLIGHT
- DTSTART:19740106T020000
- RDATE:19750223T020000
- TZOFFSETFROM:-0500
- TZOFFSETTO:-0400
- TZNAME:EDT
- END:DAYLIGHT
- BEGIN:DAYLIGHT
- DTSTART:19760425T020000
- RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19860427T070000Z
- TZOFFSETFROM:-0500
- TZOFFSETTO:-0400
- TZNAME:EDT
- END:DAYLIGHT
- BEGIN:DAYLIGHT
- DTSTART:19870405T020000
- RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20060402T070000Z
- TZOFFSETFROM:-0500
- TZOFFSETTO:-0400
- TZNAME:EDT
- END:DAYLIGHT
- BEGIN:DAYLIGHT
- DTSTART:20070311T020000
- RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
- TZOFFSETFROM:-0500
- TZOFFSETTO:-0400
- TZNAME:EDT
- END:DAYLIGHT
- BEGIN:STANDARD
- DTSTART:20071104T020000
- RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
- TZOFFSETFROM:-0400
- TZOFFSETTO:-0500
- TZNAME:EST
- END:STANDARD
- END:VTIMEZONE
-
- This is an example showing time zone information for New York City
- using only the "DTSTART" property. Note that this is only
- suitable for a recurring event that starts on or later than March
- 11, 2007 at 03:00:00 EDT (i.e., the earliest effective transition
- date and time) and ends no later than March 9, 2008 at 01:59:59
-
-
-
-Desruisseaux Standards Track [Page 68]
-
-RFC 5545 iCalendar September 2009
-
-
- EST (i.e., latest valid date and time for EST in this scenario).
- For example, this can be used for a recurring event that occurs
- every Friday, 8:00 A.M.-9:00 A.M., starting June 1, 2007, ending
- December 31, 2007,
-
- BEGIN:VTIMEZONE
- TZID:America/New_York
- LAST-MODIFIED:20050809T050000Z
- BEGIN:STANDARD
- DTSTART:20071104T020000
- TZOFFSETFROM:-0400
- TZOFFSETTO:-0500
- TZNAME:EST
- END:STANDARD
- BEGIN:DAYLIGHT
- DTSTART:20070311T020000
- TZOFFSETFROM:-0500
- TZOFFSETTO:-0400
- TZNAME:EDT
- END:DAYLIGHT
- END:VTIMEZONE
-
- This is a simple example showing the current time zone rules for
- New York City using a "RRULE" recurrence pattern. Note that there
- is no effective end date to either of the Standard Time or
- Daylight Time rules. This information would be valid for a
- recurring event starting today and continuing indefinitely.
-
- BEGIN:VTIMEZONE
- TZID:America/New_York
- LAST-MODIFIED:20050809T050000Z
- TZURL:http://zones.example.com/tz/America-New_York.ics
- BEGIN:STANDARD
- DTSTART:20071104T020000
- RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
- TZOFFSETFROM:-0400
- TZOFFSETTO:-0500
- TZNAME:EST
- END:STANDARD
- BEGIN:DAYLIGHT
- DTSTART:20070311T020000
- RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
- TZOFFSETFROM:-0500
- TZOFFSETTO:-0400
- TZNAME:EDT
- END:DAYLIGHT
- END:VTIMEZONE
-
-
-
-
-Desruisseaux Standards Track [Page 69]
-
-RFC 5545 iCalendar September 2009
-
-
- This is an example showing a set of rules for a fictitious time
- zone where the Daylight Time rule has an effective end date (i.e.,
- after that date, Daylight Time is no longer observed).
-
- BEGIN:VTIMEZONE
- TZID:Fictitious
- LAST-MODIFIED:19870101T000000Z
- BEGIN:STANDARD
- DTSTART:19671029T020000
- RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
- TZOFFSETFROM:-0400
- TZOFFSETTO:-0500
- TZNAME:EST
- END:STANDARD
- BEGIN:DAYLIGHT
- DTSTART:19870405T020000
- RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4;UNTIL=19980404T070000Z
- TZOFFSETFROM:-0500
- TZOFFSETTO:-0400
- TZNAME:EDT
- END:DAYLIGHT
- END:VTIMEZONE
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Desruisseaux Standards Track [Page 70]
-
-RFC 5545 iCalendar September 2009
-
-
- This is an example showing a set of rules for a fictitious time
- zone where the first Daylight Time rule has an effective end date.
- There is a second Daylight Time rule that picks up where the other
- left off.
-
- BEGIN:VTIMEZONE
- TZID:Fictitious
- LAST-MODIFIED:19870101T000000Z
- BEGIN:STANDARD
- DTSTART:19671029T020000
- RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
- TZOFFSETFROM:-0400
- TZOFFSETTO:-0500
- TZNAME:EST
- END:STANDARD
- BEGIN:DAYLIGHT
- DTSTART:19870405T020000
- RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4;UNTIL=19980404T070000Z
- TZOFFSETFROM:-0500
- TZOFFSETTO:-0400
- TZNAME:EDT
- END:DAYLIGHT
- BEGIN:DAYLIGHT
- DTSTART:19990424T020000
- RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=4
- TZOFFSETFROM:-0500
- TZOFFSETTO:-0400
- TZNAME:EDT
- END:DAYLIGHT
- END:VTIMEZONE
-
-3.6.6. Alarm Component
-
- Component Name: VALARM
-
- Purpose: Provide a grouping of component properties that define an
- alarm.
-
- Format Definition: A "VALARM" calendar component is defined by the
- following notation:
-
- alarmc = "BEGIN" ":" "VALARM" CRLF
- (audioprop / dispprop / emailprop)
- "END" ":" "VALARM" CRLF
-
- audioprop = *(
- ;
- ; 'action' and 'trigger' are both REQUIRED,
-
-
-
-Desruisseaux Standards Track [Page 71]
-
-RFC 5545 iCalendar September 2009
-
-
- ; but MUST NOT occur more than once.
- ;
- action / trigger /
- ;
- ; 'duration' and 'repeat' are both OPTIONAL,
- ; and MUST NOT occur more than once each;
- ; but if one occurs, so MUST the other.
- ;
- duration / repeat /
- ;
- ; The following is OPTIONAL,
- ; but MUST NOT occur more than once.
- ;
- attach /
- ;
- ; The following is OPTIONAL,
- ; and MAY occur more than once.
- ;
- x-prop / iana-prop
- ;
- )
-
- dispprop = *(
- ;
- ; The following are REQUIRED,
- ; but MUST NOT occur more than once.
- ;
- action / description / trigger /
- ;
- ; 'duration' and 'repeat' are both OPTIONAL,
- ; and MUST NOT occur more than once each;
- ; but if one occurs, so MUST the other.
- ;
- duration / repeat /
- ;
- ; The following is OPTIONAL,
- ; and MAY occur more than once.
- ;
- x-prop / iana-prop
- ;
- )
-
- emailprop = *(
- ;
- ; The following are all REQUIRED,
- ; but MUST NOT occur more than once.
- ;
- action / description / trigger / summary /
-
-
-
-Desruisseaux Standards Track [Page 72]
-
-RFC 5545 iCalendar September 2009
-
-
- ;
- ; The following is REQUIRED,
- ; and MAY occur more than once.
- ;
- attendee /
- ;
- ; 'duration' and 'repeat' are both OPTIONAL,
- ; and MUST NOT occur more than once each;
- ; but if one occurs, so MUST the other.
- ;
- duration / repeat /
- ;
- ; The following are OPTIONAL,
- ; and MAY occur more than once.
- ;
- attach / x-prop / iana-prop
- ;
- )
-
- Description: A "VALARM" calendar component is a grouping of
- component properties that is a reminder or alarm for an event or a
- to-do. For example, it may be used to define a reminder for a
- pending event or an overdue to-do.
-
- The "VALARM" calendar component MUST include the "ACTION" and
- "TRIGGER" properties. The "ACTION" property further constrains
- the "VALARM" calendar component in the following ways:
-
- When the action is "AUDIO", the alarm can also include one and
- only one "ATTACH" property, which MUST point to a sound resource,
- which is rendered when the alarm is triggered.
-
- When the action is "DISPLAY", the alarm MUST also include a
- "DESCRIPTION" property, which contains the text to be displayed
- when the alarm is triggered.
-
- When the action is "EMAIL", the alarm MUST include a "DESCRIPTION"
- property, which contains the text to be used as the message body,
- a "SUMMARY" property, which contains the text to be used as the
- message subject, and one or more "ATTENDEE" properties, which
- contain the email address of attendees to receive the message. It
- can also include one or more "ATTACH" properties, which are
- intended to be sent as message attachments. When the alarm is
- triggered, the email message is sent.
-
- The "VALARM" calendar component MUST only appear within either a
- "VEVENT" or "VTODO" calendar component. "VALARM" calendar
- components cannot be nested. Multiple mutually independent
-
-
-
-Desruisseaux Standards Track [Page 73]
-
-RFC 5545 iCalendar September 2009
-
-
- "VALARM" calendar components can be specified for a single
- "VEVENT" or "VTODO" calendar component.
-
- The "TRIGGER" property specifies when the alarm will be triggered.
- The "TRIGGER" property specifies a duration prior to the start of
- an event or a to-do. The "TRIGGER" edge may be explicitly set to
- be relative to the "START" or "END" of the event or to-do with the
- "RELATED" parameter of the "TRIGGER" property. The "TRIGGER"
- property value type can alternatively be set to an absolute
- calendar date with UTC time.
-
- In an alarm set to trigger on the "START" of an event or to-do,
- the "DTSTART" property MUST be present in the associated event or
- to-do. In an alarm in a "VEVENT" calendar component set to
- trigger on the "END" of the event, either the "DTEND" property
- MUST be present, or the "DTSTART" and "DURATION" properties MUST
- both be present. In an alarm in a "VTODO" calendar component set
- to trigger on the "END" of the to-do, either the "DUE" property
- MUST be present, or the "DTSTART" and "DURATION" properties MUST
- both be present.
-
- The alarm can be defined such that it triggers repeatedly. A
- definition of an alarm with a repeating trigger MUST include both
- the "DURATION" and "REPEAT" properties. The "DURATION" property
- specifies the delay period, after which the alarm will repeat.
- The "REPEAT" property specifies the number of additional
- repetitions that the alarm will be triggered. This repetition
- count is in addition to the initial triggering of the alarm. Both
- of these properties MUST be present in order to specify a
- repeating alarm. If one of these two properties is absent, then
- the alarm will not repeat beyond the initial trigger.
-
- The "ACTION" property is used within the "VALARM" calendar
- component to specify the type of action invoked when the alarm is
- triggered. The "VALARM" properties provide enough information for
- a specific action to be invoked. It is typically the
- responsibility of a "Calendar User Agent" (CUA) to deliver the
- alarm in the specified fashion. An "ACTION" property value of
- AUDIO specifies an alarm that causes a sound to be played to alert
- the user; DISPLAY specifies an alarm that causes a text message to
- be displayed to the user; and EMAIL specifies an alarm that causes
- an electronic email message to be delivered to one or more email
- addresses.
-
- In an AUDIO alarm, if the optional "ATTACH" property is included,
- it MUST specify an audio sound resource. The intention is that
- the sound will be played as the alarm effect. If an "ATTACH"
- property is specified that does not refer to a sound resource, or
-
-
-
-Desruisseaux Standards Track [Page 74]
-
-RFC 5545 iCalendar September 2009
-
-
- if the specified sound resource cannot be rendered (because its
- format is unsupported, or because it cannot be retrieved), then
- the CUA or other entity responsible for playing the sound may
- choose a fallback action, such as playing a built-in default
- sound, or playing no sound at all.
-
- In a DISPLAY alarm, the intended alarm effect is for the text
- value of the "DESCRIPTION" property to be displayed to the user.
-
- In an EMAIL alarm, the intended alarm effect is for an email
- message to be composed and delivered to all the addresses
- specified by the "ATTENDEE" properties in the "VALARM" calendar
- component. The "DESCRIPTION" property of the "VALARM" calendar
- component MUST be used as the body text of the message, and the
- "SUMMARY" property MUST be used as the subject text. Any "ATTACH"
- properties in the "VALARM" calendar component SHOULD be sent as
- attachments to the message.
-
- Note: Implementations should carefully consider whether they
- accept alarm components from untrusted sources, e.g., when
- importing calendar objects from external sources. One
- reasonable policy is to always ignore alarm components that the
- calendar user has not set herself, or at least ask for
- confirmation in such a case.
-
- Example: The following example is for a "VALARM" calendar component
- that specifies an audio alarm that will sound at a precise time
- and repeat 4 more times at 15-minute intervals:
-
- BEGIN:VALARM
- TRIGGER;VALUE=DATE-TIME:19970317T133000Z
- REPEAT:4
- DURATION:PT15M
- ACTION:AUDIO
- ATTACH;FMTTYPE=audio/basic:ftp://example.com/pub/
- sounds/bell-01.aud
- END:VALARM
-
- The following example is for a "VALARM" calendar component that
- specifies a display alarm that will trigger 30 minutes before the
- scheduled start of the event or of the to-do it is associated with
- and will repeat 2 more times at 15-minute intervals:
-
-
-
-
-
-
-
-
-
-Desruisseaux Standards Track [Page 75]
-
-RFC 5545 iCalendar September 2009
-
-
- BEGIN:VALARM
- TRIGGER:-PT30M
- REPEAT:2
- DURATION:PT15M
- ACTION:DISPLAY
- DESCRIPTION:Breakfast meeting with executive\n
- team at 8:30 AM EST.
- END:VALARM
-
- The following example is for a "VALARM" calendar component that
- specifies an email alarm that will trigger 2 days before the
- scheduled due DATE-TIME of a to-do with which it is associated.
- It does not repeat. The email has a subject, body, and attachment
- link.
-
- BEGIN:VALARM
- TRIGGER;RELATED=END:-P2D
- ACTION:EMAIL
- ATTENDEE:mailto:john_doe@example.com
- SUMMARY:*** REMINDER: SEND AGENDA FOR WEEKLY STAFF MEETING ***
- DESCRIPTION:A draft agenda needs to be sent out to the attendees
- to the weekly managers meeting (MGR-LIST). Attached is a
- pointer the document template for the agenda file.
- ATTACH;FMTTYPE=application/msword:http://example.com/
- templates/agenda.doc
- END:VALARM
-
-3.7. Calendar Properties
-
- The Calendar Properties are attributes that apply to the iCalendar
- object, as a whole. These properties do not appear within a calendar
- component. They SHOULD be specified after the "BEGIN:VCALENDAR"
- delimiter string and prior to any calendar component.
-
-3.7.1. Calendar Scale
-
- Property Name: CALSCALE
-
- Purpose: This property defines the calendar scale used for the
- calendar information specified in the iCalendar object.
-
- Value Type: TEXT
-
- Property Parameters: IANA and non-standard property parameters can
- be specified on this property.
-
- Conformance: This property can be specified once in an iCalendar
- object. The default value is "GREGORIAN".
-
-
-
-Desruisseaux Standards Track [Page 76]
-
-RFC 5545 iCalendar September 2009
-
-
- Description: This memo is based on the Gregorian calendar scale.
- The Gregorian calendar scale is assumed if this property is not
- specified in the iCalendar object. It is expected that other
- calendar scales will be defined in other specifications or by
- future versions of this memo.
-
- Format Definition: This property is defined by the following
- notation:
-
- calscale = "CALSCALE" calparam ":" calvalue CRLF
-
- calparam = *(";" other-param)
-
- calvalue = "GREGORIAN"
-
- Example: The following is an example of this property:
-
- CALSCALE:GREGORIAN
-
-3.7.2. Method
-
- Property Name: METHOD
-
- Purpose: This property defines the iCalendar object method
- associated with the calendar object.
-
- Value Type: TEXT
-
- Property Parameters: IANA and non-standard property parameters can
- be specified on this property.
-
- Conformance: This property can be specified once in an iCalendar
- object.
-
- Description: When used in a MIME message entity, the value of this
- property MUST be the same as the Content-Type "method" parameter
- value. If either the "METHOD" property or the Content-Type
- "method" parameter is specified, then the other MUST also be
- specified.
-
- No methods are defined by this specification. This is the subject
- of other specifications, such as the iCalendar Transport-
- independent Interoperability Protocol (iTIP) defined by [2446bis].
-
- If this property is not present in the iCalendar object, then a
- scheduling transaction MUST NOT be assumed. In such cases, the
- iCalendar object is merely being used to transport a snapshot of
-
-
-
-
-Desruisseaux Standards Track [Page 77]
-
-RFC 5545 iCalendar September 2009
-
-
- some calendar information; without the intention of conveying a
- scheduling semantic.
-
- Format Definition: This property is defined by the following
- notation:
-
- method = "METHOD" metparam ":" metvalue CRLF
-
- metparam = *(";" other-param)
-
- metvalue = iana-token
-
- Example: The following is a hypothetical example of this property to
- convey that the iCalendar object is a scheduling request:
-
- METHOD:REQUEST
-
-3.7.3. Product Identifier
-
- Property Name: PRODID
-
- Purpose: This property specifies the identifier for the product that
- created the iCalendar object.
-
- Value Type: TEXT
-
- Property Parameters: IANA and non-standard property parameters can
- be specified on this property.
-
- Conformance: The property MUST be specified once in an iCalendar
- object.
-
- Description: The vendor of the implementation SHOULD assure that
- this is a globally unique identifier; using some technique such as
- an FPI value, as defined in [ISO.9070.1991].
-
- This property SHOULD NOT be used to alter the interpretation of an
- iCalendar object beyond the semantics specified in this memo. For
- example, it is not to be used to further the understanding of non-
- standard properties.
-
- Format Definition: This property is defined by the following
- notation:
-
- prodid = "PRODID" pidparam ":" pidvalue CRLF
-
- pidparam = *(";" other-param)
-
-
-
-
-Desruisseaux Standards Track [Page 78]
-
-RFC 5545 iCalendar September 2009
-
-
- pidvalue = text
- ;Any text that describes the product and version
- ;and that is generally assured of being unique.
-
- Example: The following is an example of this property. It does not
- imply that English is the default language.
-
- PRODID:-//ABC Corporation//NONSGML My Product//EN
-
-3.7.4. Version
-
- Property Name: VERSION
-
- Purpose: This property specifies the identifier corresponding to the
- highest version number or the minimum and maximum range of the
- iCalendar specification that is required in order to interpret the
- iCalendar object.
-
- Value Type: TEXT
-
- Property Parameters: IANA and non-standard property parameters can
- be specified on this property.
-
- Conformance: This property MUST be specified once in an iCalendar
- object.
-
- Description: A value of "2.0" corresponds to this memo.
-
- Format Definition: This property is defined by the following
- notation:
-
- version = "VERSION" verparam ":" vervalue CRLF
-
- verparam = *(";" other-param)
-
- vervalue = "2.0" ;This memo
- / maxver
- / (minver ";" maxver)
-
- minver =
- ;Minimum iCalendar version needed to parse the iCalendar object.
-
- maxver =
- ;Maximum iCalendar version needed to parse the iCalendar object.
-
-
-
-
-
-
-
-Desruisseaux Standards Track [Page 79]
-
-RFC 5545 iCalendar September 2009
-
-
- Example: The following is an example of this property:
-
- VERSION:2.0
-
-3.8. Component Properties
-
- The following properties can appear within calendar components, as
- specified by each component property definition.
-
-3.8.1. Descriptive Component Properties
-
- The following properties specify descriptive information about
- calendar components.
-
-3.8.1.1. Attachment
-
- Property Name: ATTACH
-
- Purpose: This property provides the capability to associate a
- document object with a calendar component.
-
- Value Type: The default value type for this property is URI. The
- value type can also be set to BINARY to indicate inline binary
- encoded content information.
-
- Property Parameters: IANA, non-standard, inline encoding, and value
- data type property parameters can be specified on this property.
- The format type parameter can be specified on this property and is
- RECOMMENDED for inline binary encoded content information.
-
- Conformance: This property can be specified multiple times in a
- "VEVENT", "VTODO", "VJOURNAL", or "VALARM" calendar component with
- the exception of AUDIO alarm that only allows this property to
- occur once.
-
- Description: This property is used in "VEVENT", "VTODO", and
- "VJOURNAL" calendar components to associate a resource (e.g.,
- document) with the calendar component. This property is used in
- "VALARM" calendar components to specify an audio sound resource or
- an email message attachment. This property can be specified as a
- URI pointing to a resource or as inline binary encoded content.
-
- When this property is specified as inline binary encoded content,
- calendar applications MAY attempt to guess the media type of the
- resource via inspection of its content if and only if the media
- type of the resource is not given by the "FMTTYPE" parameter. If
- the media type remains unknown, calendar applications SHOULD treat
- it as type "application/octet-stream".
-
-
-
-Desruisseaux Standards Track [Page 80]
-
-RFC 5545 iCalendar September 2009
-
-
- Format Definition: This property is defined by the following
- notation:
-
- attach = "ATTACH" attachparam ( ":" uri ) /
- (
- ";" "ENCODING" "=" "BASE64"
- ";" "VALUE" "=" "BINARY"
- ":" binary
- )
- CRLF
-
- attachparam = *(
- ;
- ; The following is OPTIONAL for a URI value,
- ; RECOMMENDED for a BINARY value,
- ; and MUST NOT occur more than once.
- ;
- (";" fmttypeparam) /
- ;
- ; The following is OPTIONAL,
- ; and MAY occur more than once.
- ;
- (";" other-param)
- ;
- )
-
- Example: The following are examples of this property:
-
- ATTACH:CID:jsmith.part3.960817T083000.xyzMail@example.com
-
- ATTACH;FMTTYPE=application/postscript:ftp://example.com/pub/
- reports/r-960812.ps
-
-3.8.1.2. Categories
-
- Property Name: CATEGORIES
-
- Purpose: This property defines the categories for a calendar
- component.
-
- Value Type: TEXT
-
- Property Parameters: IANA, non-standard, and language property
- parameters can be specified on this property.
-
- Conformance: The property can be specified within "VEVENT", "VTODO",
- or "VJOURNAL" calendar components.
-
-
-
-
-Desruisseaux Standards Track [Page 81]
-
-RFC 5545 iCalendar September 2009
-
-
- Description: This property is used to specify categories or subtypes
- of the calendar component. The categories are useful in searching
- for a calendar component of a particular type and category.
- Within the "VEVENT", "VTODO", or "VJOURNAL" calendar components,
- more than one category can be specified as a COMMA-separated list
- of categories.
-
- Format Definition: This property is defined by the following
- notation:
-
- categories = "CATEGORIES" catparam ":" text *("," text)
- CRLF
-
- catparam = *(
- ;
- ; The following is OPTIONAL,
- ; but MUST NOT occur more than once.
- ;
- (";" languageparam ) /
- ;
- ; The following is OPTIONAL,
- ; and MAY occur more than once.
- ;
- (";" other-param)
- ;
- )
-
- Example: The following are examples of this property:
-
- CATEGORIES:APPOINTMENT,EDUCATION
-
- CATEGORIES:MEETING
-
-3.8.1.3. Classification
-
- Property Name: CLASS
-
- Purpose: This property defines the access classification for a
- calendar component.
-
- Value Type: TEXT
-
- Property Parameters: IANA and non-standard property parameters can
- be specified on this property.
-
- Conformance: The property can be specified once in a "VEVENT",
- "VTODO", or "VJOURNAL" calendar components.
-
-
-
-
-Desruisseaux Standards Track [Page 82]
-
-RFC 5545 iCalendar September 2009
-
-
- Description: An access classification is only one component of the
- general security system within a calendar application. It
- provides a method of capturing the scope of the access the
- calendar owner intends for information within an individual
- calendar entry. The access classification of an individual
- iCalendar component is useful when measured along with the other
- security components of a calendar system (e.g., calendar user
- authentication, authorization, access rights, access role, etc.).
- Hence, the semantics of the individual access classifications
- cannot be completely defined by this memo alone. Additionally,
- due to the "blind" nature of most exchange processes using this
- memo, these access classifications cannot serve as an enforcement
- statement for a system receiving an iCalendar object. Rather,
- they provide a method for capturing the intention of the calendar
- owner for the access to the calendar component. If not specified
- in a component that allows this property, the default value is
- PUBLIC. Applications MUST treat x-name and iana-token values they
- don't recognize the same way as they would the PRIVATE value.
-
- Format Definition: This property is defined by the following
- notation:
-
- class = "CLASS" classparam ":" classvalue CRLF
-
- classparam = *(";" other-param)
-
- classvalue = "PUBLIC" / "PRIVATE" / "CONFIDENTIAL" / iana-token
- / x-name
- ;Default is PUBLIC
-
- Example: The following is an example of this property:
-
- CLASS:PUBLIC
-
-3.8.1.4. Comment
-
- Property Name: COMMENT
-
- Purpose: This property specifies non-processing information intended
- to provide a comment to the calendar user.
-
- Value Type: TEXT
-
- Property Parameters: IANA, non-standard, alternate text
- representation, and language property parameters can be specified
- on this property.
-
-
-
-
-
-Desruisseaux Standards Track [Page 83]
-
-RFC 5545 iCalendar September 2009
-
-
- Conformance: This property can be specified multiple times in
- "VEVENT", "VTODO", "VJOURNAL", and "VFREEBUSY" calendar components
- as well as in the "STANDARD" and "DAYLIGHT" sub-components.
-
- Description: This property is used to specify a comment to the
- calendar user.
-
- Format Definition: This property is defined by the following
- notation:
-
- comment = "COMMENT" commparam ":" text CRLF
-
- commparam = *(
- ;
- ; The following are OPTIONAL,
- ; but MUST NOT occur more than once.
- ;
- (";" altrepparam) / (";" languageparam) /
- ;
- ; The following is OPTIONAL,
- ; and MAY occur more than once.
- ;
- (";" other-param)
- ;
- )
-
- Example: The following is an example of this property:
-
- COMMENT:The meeting really needs to include both ourselves
- and the customer. We can't hold this meeting without them.
- As a matter of fact\, the venue for the meeting ought to be at
- their site. - - John
-
-3.8.1.5. Description
-
- Property Name: DESCRIPTION
-
- Purpose: This property provides a more complete description of the
- calendar component than that provided by the "SUMMARY" property.
-
- Value Type: TEXT
-
- Property Parameters: IANA, non-standard, alternate text
- representation, and language property parameters can be specified
- on this property.
-
-
-
-
-
-
-Desruisseaux Standards Track [Page 84]
-
-RFC 5545 iCalendar September 2009
-
-
- Conformance: The property can be specified in the "VEVENT", "VTODO",
- "VJOURNAL", or "VALARM" calendar components. The property can be
- specified multiple times only within a "VJOURNAL" calendar
- component.
-
- Description: This property is used in the "VEVENT" and "VTODO" to
- capture lengthy textual descriptions associated with the activity.
-
- This property is used in the "VJOURNAL" calendar component to
- capture one or more textual journal entries.
-
- This property is used in the "VALARM" calendar component to
- capture the display text for a DISPLAY category of alarm, and to
- capture the body text for an EMAIL category of alarm.
-
- Format Definition: This property is defined by the following
- notation:
-
- description = "DESCRIPTION" descparam ":" text CRLF
-
- descparam = *(
- ;
- ; The following are OPTIONAL,
- ; but MUST NOT occur more than once.
- ;
- (";" altrepparam) / (";" languageparam) /
- ;
- ; The following is OPTIONAL,
- ; and MAY occur more than once.
- ;
- (";" other-param)
- ;
- )
-
- Example: The following is an example of this property with formatted
- line breaks in the property value:
-
- DESCRIPTION:Meeting to provide technical review for "Phoenix"
- design.\nHappy Face Conference Room. Phoenix design team
- MUST attend this meeting.\nRSVP to team leader.
-
-3.8.1.6. Geographic Position
-
- Property Name: GEO
-
- Purpose: This property specifies information related to the global
- position for the activity specified by a calendar component.
-
-
-
-
-Desruisseaux Standards Track [Page 85]
-
-RFC 5545 iCalendar September 2009
-
-
- Value Type: FLOAT. The value MUST be two SEMICOLON-separated FLOAT
- values.
-
- Property Parameters: IANA and non-standard property parameters can
- be specified on this property.
-
- Conformance: This property can be specified in "VEVENT" or "VTODO"
- calendar components.
-
- Description: This property value specifies latitude and longitude,
- in that order (i.e., "LAT LON" ordering). The longitude
- represents the location east or west of the prime meridian as a
- positive or negative real number, respectively. The longitude and
- latitude values MAY be specified up to six decimal places, which
- will allow for accuracy to within one meter of geographical
- position. Receiving applications MUST accept values of this
- precision and MAY truncate values of greater precision.
-
- Values for latitude and longitude shall be expressed as decimal
- fractions of degrees. Whole degrees of latitude shall be
- represented by a two-digit decimal number ranging from 0 through
- 90. Whole degrees of longitude shall be represented by a decimal
- number ranging from 0 through 180. When a decimal fraction of a
- degree is specified, it shall be separated from the whole number
- of degrees by a decimal point.
-
- Latitudes north of the equator shall be specified by a plus sign
- (+), or by the absence of a minus sign (-), preceding the digits
- designating degrees. Latitudes south of the Equator shall be
- designated by a minus sign (-) preceding the digits designating
- degrees. A point on the Equator shall be assigned to the Northern
- Hemisphere.
-
- Longitudes east of the prime meridian shall be specified by a plus
- sign (+), or by the absence of a minus sign (-), preceding the
- digits designating degrees. Longitudes west of the meridian shall
- be designated by minus sign (-) preceding the digits designating
- degrees. A point on the prime meridian shall be assigned to the
- Eastern Hemisphere. A point on the 180th meridian shall be
- assigned to the Western Hemisphere. One exception to this last
- convention is permitted. For the special condition of describing
- a band of latitude around the earth, the East Bounding Coordinate
- data element shall be assigned the value +180 (180) degrees.
-
- Any spatial address with a latitude of +90 (90) or -90 degrees
- will specify the position at the North or South Pole,
- respectively. The component for longitude may have any legal
- value.
-
-
-
-Desruisseaux Standards Track [Page 86]
-
-RFC 5545 iCalendar September 2009
-
-
- With the exception of the special condition described above, this
- form is specified in [ANSI INCITS 61-1986].
-
- The simple formula for converting degrees-minutes-seconds into
- decimal degrees is:
-
- decimal = degrees + minutes/60 + seconds/3600.
-
- Format Definition: This property is defined by the following
- notation:
-
- geo = "GEO" geoparam ":" geovalue CRLF
-
- geoparam = *(";" other-param)
-
- geovalue = float ";" float
- ;Latitude and Longitude components
-
- Example: The following is an example of this property:
-
- GEO:37.386013;-122.082932
-
-3.8.1.7. Location
-
- Property Name: LOCATION
-
- Purpose: This property defines the intended venue for the activity
- defined by a calendar component.
-
- Value Type: TEXT
-
- Property Parameters: IANA, non-standard, alternate text
- representation, and language property parameters can be specified
- on this property.
-
- Conformance: This property can be specified in "VEVENT" or "VTODO"
- calendar component.
-
- Description: Specific venues such as conference or meeting rooms may
- be explicitly specified using this property. An alternate
- representation may be specified that is a URI that points to
- directory information with more structured specification of the
- location. For example, the alternate representation may specify
- either an LDAP URL [RFC4516] pointing to an LDAP server entry or a
- CID URL [RFC2392] pointing to a MIME body part containing a
- Virtual-Information Card (vCard) [RFC2426] for the location.
-
-
-
-
-
-Desruisseaux Standards Track [Page 87]
-
-RFC 5545 iCalendar September 2009
-
-
- Format Definition: This property is defined by the following
- notation:
-
- location = "LOCATION" locparam ":" text CRLF
-
- locparam = *(
- ;
- ; The following are OPTIONAL,
- ; but MUST NOT occur more than once.
- ;
- (";" altrepparam) / (";" languageparam) /
- ;
- ; The following is OPTIONAL,
- ; and MAY occur more than once.
- ;
- (";" other-param)
- ;
- )
-
- Example: The following are some examples of this property:
-
- LOCATION:Conference Room - F123\, Bldg. 002
-
- LOCATION;ALTREP="http://xyzcorp.com/conf-rooms/f123.vcf":
- Conference Room - F123\, Bldg. 002
-
-3.8.1.8. Percent Complete
-
- Property Name: PERCENT-COMPLETE
-
- Purpose: This property is used by an assignee or delegatee of a
- to-do to convey the percent completion of a to-do to the
- "Organizer".
-
- Value Type: INTEGER
-
- Property Parameters: IANA and non-standard property parameters can
- be specified on this property.
-
- Conformance: This property can be specified once in a "VTODO"
- calendar component.
-
- Description: The property value is a positive integer between 0 and
- 100. A value of "0" indicates the to-do has not yet been started.
- A value of "100" indicates that the to-do has been completed.
- Integer values in between indicate the percent partially complete.
-
-
-
-
-
-Desruisseaux Standards Track [Page 88]
-
-RFC 5545 iCalendar September 2009
-
-
- When a to-do is assigned to multiple individuals, the property
- value indicates the percent complete for that portion of the to-do
- assigned to the assignee or delegatee. For example, if a to-do is
- assigned to both individuals "A" and "B". A reply from "A" with a
- percent complete of "70" indicates that "A" has completed 70% of
- the to-do assigned to them. A reply from "B" with a percent
- complete of "50" indicates "B" has completed 50% of the to-do
- assigned to them.
-
- Format Definition: This property is defined by the following
- notation:
-
- percent = "PERCENT-COMPLETE" pctparam ":" integer CRLF
-
- pctparam = *(";" other-param)
-
- Example: The following is an example of this property to show 39%
- completion:
-
- PERCENT-COMPLETE:39
-
-3.8.1.9. Priority
-
- Property Name: PRIORITY
-
- Purpose: This property defines the relative priority for a calendar
- component.
-
- Value Type: INTEGER
-
- Property Parameters: IANA and non-standard property parameters can
- be specified on this property.
-
- Conformance: This property can be specified in "VEVENT" and "VTODO"
- calendar components.
-
- Description: This priority is specified as an integer in the range 0
- to 9. A value of 0 specifies an undefined priority. A value of 1
- is the highest priority. A value of 2 is the second highest
- priority. Subsequent numbers specify a decreasing ordinal
- priority. A value of 9 is the lowest priority.
-
- A CUA with a three-level priority scheme of "HIGH", "MEDIUM", and
- "LOW" is mapped into this property such that a property value in
- the range of 1 to 4 specifies "HIGH" priority. A value of 5 is
- the normal or "MEDIUM" priority. A value in the range of 6 to 9
- is "LOW" priority.
-
-
-
-
-Desruisseaux Standards Track [Page 89]
-
-RFC 5545 iCalendar September 2009
-
-
- A CUA with a priority schema of "A1", "A2", "A3", "B1", "B2", ...,
- "C3" is mapped into this property such that a property value of 1
- specifies "A1", a property value of 2 specifies "A2", a property
- value of 3 specifies "A3", and so forth up to a property value of
- 9 specifies "C3".
-
- Other integer values are reserved for future use.
-
- Within a "VEVENT" calendar component, this property specifies a
- priority for the event. This property may be useful when more
- than one event is scheduled for a given time period.
-
- Within a "VTODO" calendar component, this property specified a
- priority for the to-do. This property is useful in prioritizing
- multiple action items for a given time period.
-
- Format Definition: This property is defined by the following
- notation:
-
- priority = "PRIORITY" prioparam ":" priovalue CRLF
- ;Default is zero (i.e., undefined).
-
- prioparam = *(";" other-param)
-
- priovalue = integer ;Must be in the range [0..9]
- ; All other values are reserved for future use.
-
- Example: The following is an example of a property with the highest
- priority:
-
- PRIORITY:1
-
- The following is an example of a property with a next highest
- priority:
-
- PRIORITY:2
-
- The following is an example of a property with no priority. This
- is equivalent to not specifying the "PRIORITY" property:
-
- PRIORITY:0
-
-
-
-
-
-
-
-
-
-
-Desruisseaux Standards Track [Page 90]
-
-RFC 5545 iCalendar September 2009
-
-
-3.8.1.10. Resources
-
- Property Name: RESOURCES
-
- Purpose: This property defines the equipment or resources
- anticipated for an activity specified by a calendar component.
-
- Value Type: TEXT
-
- Property Parameters: IANA, non-standard, alternate text
- representation, and language property parameters can be specified
- on this property.
-
- Conformance: This property can be specified once in "VEVENT" or
- "VTODO" calendar component.
-
- Description: The property value is an arbitrary text. More than one
- resource can be specified as a COMMA-separated list of resources.
-
- Format Definition: This property is defined by the following
- notation:
-
- resources = "RESOURCES" resrcparam ":" text *("," text) CRLF
-
- resrcparam = *(
- ;
- ; The following are OPTIONAL,
- ; but MUST NOT occur more than once.
- ;
- (";" altrepparam) / (";" languageparam) /
- ;
- ; The following is OPTIONAL,
- ; and MAY occur more than once.
- ;
- (";" other-param)
- ;
- )
-
- Example: The following is an example of this property:
-
- RESOURCES:EASEL,PROJECTOR,VCR
-
- RESOURCES;LANGUAGE=fr:Nettoyeur haute pression
-
-
-
-
-
-
-
-
-Desruisseaux Standards Track [Page 91]
-
-RFC 5545 iCalendar September 2009
-
-
-3.8.1.11. Status
-
- Property Name: STATUS
-
- Purpose: This property defines the overall status or confirmation
- for the calendar component.
-
- Value Type: TEXT
-
- Property Parameters: IANA and non-standard property parameters can
- be specified on this property.
-
- Conformance: This property can be specified once in "VEVENT",
- "VTODO", or "VJOURNAL" calendar components.
-
- Description: In a group-scheduled calendar component, the property
- is used by the "Organizer" to provide a confirmation of the event
- to the "Attendees". For example in a "VEVENT" calendar component,
- the "Organizer" can indicate that a meeting is tentative,
- confirmed, or cancelled. In a "VTODO" calendar component, the
- "Organizer" can indicate that an action item needs action, is
- completed, is in process or being worked on, or has been
- cancelled. In a "VJOURNAL" calendar component, the "Organizer"
- can indicate that a journal entry is draft, final, or has been
- cancelled or removed.
-
- Format Definition: This property is defined by the following
- notation:
-
- status = "STATUS" statparam ":" statvalue CRLF
-
- statparam = *(";" other-param)
-
- statvalue = (statvalue-event
- / statvalue-todo
- / statvalue-jour)
-
- statvalue-event = "TENTATIVE" ;Indicates event is tentative.
- / "CONFIRMED" ;Indicates event is definite.
- / "CANCELLED" ;Indicates event was cancelled.
- ;Status values for a "VEVENT"
-
- statvalue-todo = "NEEDS-ACTION" ;Indicates to-do needs action.
- / "COMPLETED" ;Indicates to-do completed.
- / "IN-PROCESS" ;Indicates to-do in process of.
- / "CANCELLED" ;Indicates to-do was cancelled.
- ;Status values for "VTODO".
-
-
-
-
-Desruisseaux Standards Track [Page 92]
-
-RFC 5545 iCalendar September 2009
-
-
- statvalue-jour = "DRAFT" ;Indicates journal is draft.
- / "FINAL" ;Indicates journal is final.
- / "CANCELLED" ;Indicates journal is removed.
- ;Status values for "VJOURNAL".
-
- Example: The following is an example of this property for a "VEVENT"
- calendar component:
-
- STATUS:TENTATIVE
-
- The following is an example of this property for a "VTODO"
- calendar component:
-
- STATUS:NEEDS-ACTION
-
- The following is an example of this property for a "VJOURNAL"
- calendar component:
-
- STATUS:DRAFT
-
-3.8.1.12. Summary
-
- Property Name: SUMMARY
-
- Purpose: This property defines a short summary or subject for the
- calendar component.
-
- Value Type: TEXT
-
- Property Parameters: IANA, non-standard, alternate text
- representation, and language property parameters can be specified
- on this property.
-
- Conformance: The property can be specified in "VEVENT", "VTODO",
- "VJOURNAL", or "VALARM" calendar components.
-
- Description: This property is used in the "VEVENT", "VTODO", and
- "VJOURNAL" calendar components to capture a short, one-line
- summary about the activity or journal entry.
-
- This property is used in the "VALARM" calendar component to
- capture the subject of an EMAIL category of alarm.
-
- Format Definition: This property is defined by the following
- notation:
-
-
-
-
-
-
-Desruisseaux Standards Track [Page 93]
-
-RFC 5545 iCalendar September 2009
-
-
- summary = "SUMMARY" summparam ":" text CRLF
-
- summparam = *(
- ;
- ; The following are OPTIONAL,
- ; but MUST NOT occur more than once.
- ;
- (";" altrepparam) / (";" languageparam) /
- ;
- ; The following is OPTIONAL,
- ; and MAY occur more than once.
- ;
- (";" other-param)
- ;
- )
-
- Example: The following is an example of this property:
-
- SUMMARY:Department Party
-
-3.8.2. Date and Time Component Properties
-
- The following properties specify date and time related information in
- calendar components.
-
-3.8.2.1. Date-Time Completed
-
- Property Name: COMPLETED
-
- Purpose: This property defines the date and time that a to-do was
- actually completed.
-
- Value Type: DATE-TIME
-
- Property Parameters: IANA and non-standard property parameters can
- be specified on this property.
-
- Conformance: The property can be specified in a "VTODO" calendar
- component. The value MUST be specified as a date with UTC time.
-
- Description: This property defines the date and time that a to-do
- was actually completed.
-
- Format Definition: This property is defined by the following
- notation:
-
-
-
-
-
-
-Desruisseaux Standards Track [Page 94]
-
-RFC 5545 iCalendar September 2009
-
-
- completed = "COMPLETED" compparam ":" date-time CRLF
-
- compparam = *(";" other-param)
-
- Example: The following is an example of this property:
-
- COMPLETED:19960401T150000Z
-
-3.8.2.2. Date-Time End
-
- Property Name: DTEND
-
- Purpose: This property specifies the date and time that a calendar
- component ends.
-
- Value Type: The default value type is DATE-TIME. The value type can
- be set to a DATE value type.
-
- Property Parameters: IANA, non-standard, value data type, and time
- zone identifier property parameters can be specified on this
- property.
-
- Conformance: This property can be specified in "VEVENT" or
- "VFREEBUSY" calendar components.
-
- Description: Within the "VEVENT" calendar component, this property
- defines the date and time by which the event ends. The value type
- of this property MUST be the same as the "DTSTART" property, and
- its value MUST be later in time than the value of the "DTSTART"
- property. Furthermore, this property MUST be specified as a date
- with local time if and only if the "DTSTART" property is also
- specified as a date with local time.
-
- Within the "VFREEBUSY" calendar component, this property defines
- the end date and time for the free or busy time information. The
- time MUST be specified in the UTC time format. The value MUST be
- later in time than the value of the "DTSTART" property.
-
- Format Definition: This property is defined by the following
- notation:
-
-
-
-
-
-
-
-
-
-
-
-Desruisseaux Standards Track [Page 95]
-
-RFC 5545 iCalendar September 2009
-
-
- dtend = "DTEND" dtendparam ":" dtendval CRLF
-
- dtendparam = *(
- ;
- ; The following are OPTIONAL,
- ; but MUST NOT occur more than once.
- ;
- (";" "VALUE" "=" ("DATE-TIME" / "DATE")) /
- (";" tzidparam) /
- ;
- ; The following is OPTIONAL,
- ; and MAY occur more than once.
- ;
- (";" other-param)
- ;
- )
-
- dtendval = date-time / date
- ;Value MUST match value type
-
- Example: The following is an example of this property:
-
- DTEND:19960401T150000Z
-
- DTEND;VALUE=DATE:19980704
-
-3.8.2.3. Date-Time Due
-
- Property Name: DUE
-
- Purpose: This property defines the date and time that a to-do is
- expected to be completed.
-
- Value Type: The default value type is DATE-TIME. The value type can
- be set to a DATE value type.
-
- Property Parameters: IANA, non-standard, value data type, and time
- zone identifier property parameters can be specified on this
- property.
-
- Conformance: The property can be specified once in a "VTODO"
- calendar component.
-
- Description: This property defines the date and time before which a
- to-do is expected to be completed. For cases where this property
- is specified in a "VTODO" calendar component that also specifies a
- "DTSTART" property, the value type of this property MUST be the
- same as the "DTSTART" property, and the value of this property
-
-
-
-Desruisseaux Standards Track [Page 96]
-
-RFC 5545 iCalendar September 2009
-
-
- MUST be later in time than the value of the "DTSTART" property.
- Furthermore, this property MUST be specified as a date with local
- time if and only if the "DTSTART" property is also specified as a
- date with local time.
-
- Format Definition: This property is defined by the following
- notation:
-
- due = "DUE" dueparam ":" dueval CRLF
-
- dueparam = *(
- ;
- ; The following are OPTIONAL,
- ; but MUST NOT occur more than once.
- ;
- (";" "VALUE" "=" ("DATE-TIME" / "DATE")) /
- (";" tzidparam) /
- ;
- ; The following is OPTIONAL,
- ; and MAY occur more than once.
- ;
- (";" other-param)
- ;
- )
-
- dueval = date-time / date
- ;Value MUST match value type
-
- Example: The following is an example of this property:
-
- DUE:19980430T000000Z
-
-3.8.2.4. Date-Time Start
-
- Property Name: DTSTART
-
- Purpose: This property specifies when the calendar component begins.
-
- Value Type: The default value type is DATE-TIME. The time value
- MUST be one of the forms defined for the DATE-TIME value type.
- The value type can be set to a DATE value type.
-
- Property Parameters: IANA, non-standard, value data type, and time
- zone identifier property parameters can be specified on this
- property.
-
- Conformance: This property can be specified once in the "VEVENT",
- "VTODO", or "VFREEBUSY" calendar components as well as in the
-
-
-
-Desruisseaux Standards Track [Page 97]
-
-RFC 5545 iCalendar September 2009
-
-
- "STANDARD" and "DAYLIGHT" sub-components. This property is
- REQUIRED in all types of recurring calendar components that
- specify the "RRULE" property. This property is also REQUIRED in
- "VEVENT" calendar components contained in iCalendar objects that
- don't specify the "METHOD" property.
-
- Description: Within the "VEVENT" calendar component, this property
- defines the start date and time for the event.
-
- Within the "VFREEBUSY" calendar component, this property defines
- the start date and time for the free or busy time information.
- The time MUST be specified in UTC time.
-
- Within the "STANDARD" and "DAYLIGHT" sub-components, this property
- defines the effective start date and time for a time zone
- specification. This property is REQUIRED within each "STANDARD"
- and "DAYLIGHT" sub-components included in "VTIMEZONE" calendar
- components and MUST be specified as a date with local time without
- the "TZID" property parameter.
-
- Format Definition: This property is defined by the following
- notation:
-
- dtstart = "DTSTART" dtstparam ":" dtstval CRLF
-
- dtstparam = *(
- ;
- ; The following are OPTIONAL,
- ; but MUST NOT occur more than once.
- ;
- (";" "VALUE" "=" ("DATE-TIME" / "DATE")) /
- (";" tzidparam) /
- ;
- ; The following is OPTIONAL,
- ; and MAY occur more than once.
- ;
- (";" other-param)
- ;
- )
-
- dtstval = date-time / date
- ;Value MUST match value type
-
- Example: The following is an example of this property:
-
- DTSTART:19980118T073000Z
-
-
-
-
-
-Desruisseaux Standards Track [Page 98]
-
-RFC 5545 iCalendar September 2009
-
-
-3.8.2.5. Duration
-
- Property Name: DURATION
-
- Purpose: This property specifies a positive duration of time.
-
- Value Type: DURATION
-
- Property Parameters: IANA and non-standard property parameters can
- be specified on this property.
-
- Conformance: This property can be specified in "VEVENT", "VTODO", or
- "VALARM" calendar components.
-
- Description: In a "VEVENT" calendar component the property may be
- used to specify a duration of the event, instead of an explicit
- end DATE-TIME. In a "VTODO" calendar component the property may
- be used to specify a duration for the to-do, instead of an
- explicit due DATE-TIME. In a "VALARM" calendar component the
- property may be used to specify the delay period prior to
- repeating an alarm. When the "DURATION" property relates to a
- "DTSTART" property that is specified as a DATE value, then the
- "DURATION" property MUST be specified as a "dur-day" or "dur-week"
- value.
-
- Format Definition: This property is defined by the following
- notation:
-
- duration = "DURATION" durparam ":" dur-value CRLF
- ;consisting of a positive duration of time.
-
- durparam = *(";" other-param)
-
- Example: The following is an example of this property that specifies
- an interval of time of one hour and zero minutes and zero seconds:
-
- DURATION:PT1H0M0S
-
- The following is an example of this property that specifies an
- interval of time of 15 minutes.
-
- DURATION:PT15M
-
-
-
-
-
-
-
-
-
-Desruisseaux Standards Track [Page 99]
-
-RFC 5545 iCalendar September 2009
-
-
-3.8.2.6. Free/Busy Time
-
- Property Name: FREEBUSY
-
- Purpose: This property defines one or more free or busy time
- intervals.
-
- Value Type: PERIOD
-
- Property Parameters: IANA, non-standard, and free/busy time type
- property parameters can be specified on this property.
-
- Conformance: The property can be specified in a "VFREEBUSY" calendar
- component.
-
- Description: These time periods can be specified as either a start
- and end DATE-TIME or a start DATE-TIME and DURATION. The date and
- time MUST be a UTC time format.
-
- "FREEBUSY" properties within the "VFREEBUSY" calendar component
- SHOULD be sorted in ascending order, based on start time and then
- end time, with the earliest periods first.
-
- The "FREEBUSY" property can specify more than one value, separated
- by the COMMA character. In such cases, the "FREEBUSY" property
- values MUST all be of the same "FBTYPE" property parameter type
- (e.g., all values of a particular "FBTYPE" listed together in a
- single property).
-
- Format Definition: This property is defined by the following
- notation:
-
- freebusy = "FREEBUSY" fbparam ":" fbvalue CRLF
-
- fbparam = *(
- ;
- ; The following is OPTIONAL,
- ; but MUST NOT occur more than once.
- ;
- (";" fbtypeparam) /
- ;
- ; The following is OPTIONAL,
- ; and MAY occur more than once.
- ;
- (";" other-param)
- ;
- )
-
-
-
-
-Desruisseaux Standards Track [Page 100]
-
-RFC 5545 iCalendar September 2009
-
-
- fbvalue = period *("," period)
- ;Time value MUST be in the UTC time format.
-
- Example: The following are some examples of this property:
-
- FREEBUSY;FBTYPE=BUSY-UNAVAILABLE:19970308T160000Z/PT8H30M
-
- FREEBUSY;FBTYPE=FREE:19970308T160000Z/PT3H,19970308T200000Z/PT1H
-
- FREEBUSY;FBTYPE=FREE:19970308T160000Z/PT3H,19970308T200000Z/PT1H
- ,19970308T230000Z/19970309T000000Z
-
-3.8.2.7. Time Transparency
-
- Property Name: TRANSP
-
- Purpose: This property defines whether or not an event is
- transparent to busy time searches.
-
- Value Type: TEXT
-
- Property Parameters: IANA and non-standard property parameters can
- be specified on this property.
-
- Conformance: This property can be specified once in a "VEVENT"
- calendar component.
-
- Description: Time Transparency is the characteristic of an event
- that determines whether it appears to consume time on a calendar.
- Events that consume actual time for the individual or resource
- associated with the calendar SHOULD be recorded as OPAQUE,
- allowing them to be detected by free/busy time searches. Other
- events, which do not take up the individual's (or resource's) time
- SHOULD be recorded as TRANSPARENT, making them invisible to free/
- busy time searches.
-
- Format Definition: This property is defined by the following
- notation:
-
- transp = "TRANSP" transparam ":" transvalue CRLF
-
- transparam = *(";" other-param)
-
- transvalue = "OPAQUE"
- ;Blocks or opaque on busy time searches.
- / "TRANSPARENT"
- ;Transparent on busy time searches.
- ;Default value is OPAQUE
-
-
-
-Desruisseaux Standards Track [Page 101]
-
-RFC 5545 iCalendar September 2009
-
-
- Example: The following is an example of this property for an event
- that is transparent or does not block on free/busy time searches:
-
- TRANSP:TRANSPARENT
-
- The following is an example of this property for an event that is
- opaque or blocks on free/busy time searches:
-
- TRANSP:OPAQUE
-
-3.8.3. Time Zone Component Properties
-
- The following properties specify time zone information in calendar
- components.
-
-3.8.3.1. Time Zone Identifier
-
- Property Name: TZID
-
- Purpose: This property specifies the text value that uniquely
- identifies the "VTIMEZONE" calendar component in the scope of an
- iCalendar object.
-
- Value Type: TEXT
-
- Property Parameters: IANA and non-standard property parameters can
- be specified on this property.
-
- Conformance: This property MUST be specified in a "VTIMEZONE"
- calendar component.
-
- Description: This is the label by which a time zone calendar
- component is referenced by any iCalendar properties whose value
- type is either DATE-TIME or TIME and not intended to specify a UTC
- or a "floating" time. The presence of the SOLIDUS character as a
- prefix, indicates that this "TZID" represents an unique ID in a
- globally defined time zone registry (when such registry is
- defined).
-
- Note: This document does not define a naming convention for
- time zone identifiers. Implementers may want to use the naming
- conventions defined in existing time zone specifications such
- as the public-domain TZ database [TZDB]. The specification of
- globally unique time zone identifiers is not addressed by this
- document and is left for future study.
-
-
-
-
-
-
-Desruisseaux Standards Track [Page 102]
-
-RFC 5545 iCalendar September 2009
-
-
- Format Definition: This property is defined by the following
- notation:
-
- tzid = "TZID" tzidpropparam ":" [tzidprefix] text CRLF
-
- tzidpropparam = *(";" other-param)
-
- ;tzidprefix = "/"
- ; Defined previously. Just listed here for reader convenience.
-
- Example: The following are examples of non-globally unique time zone
- identifiers:
-
- TZID:America/New_York
-
- TZID:America/Los_Angeles
-
- The following is an example of a fictitious globally unique time
- zone identifier:
-
- TZID:/example.org/America/New_York
-
-3.8.3.2. Time Zone Name
-
- Property Name: TZNAME
-
- Purpose: This property specifies the customary designation for a
- time zone description.
-
- Value Type: TEXT
-
- Property Parameters: IANA, non-standard, and language property
- parameters can be specified on this property.
-
- Conformance: This property can be specified in "STANDARD" and
- "DAYLIGHT" sub-components.
-
- Description: This property specifies a customary name that can be
- used when displaying dates that occur during the observance
- defined by the time zone sub-component.
-
- Format Definition: This property is defined by the following
- notation:
-
-
-
-
-
-
-
-
-Desruisseaux Standards Track [Page 103]
-
-RFC 5545 iCalendar September 2009
-
-
- tzname = "TZNAME" tznparam ":" text CRLF
-
- tznparam = *(
- ;
- ; The following is OPTIONAL,
- ; but MUST NOT occur more than once.
- ;
- (";" languageparam) /
- ;
- ; The following is OPTIONAL,
- ; and MAY occur more than once.
- ;
- (";" other-param)
- ;
- )
-
- Example: The following are examples of this property:
-
- TZNAME:EST
-
- TZNAME;LANGUAGE=fr-CA:HNE
-
-3.8.3.3. Time Zone Offset From
-
- Property Name: TZOFFSETFROM
-
- Purpose: This property specifies the offset that is in use prior to
- this time zone observance.
-
- Value Type: UTC-OFFSET
-
- Property Parameters: IANA and non-standard property parameters can
- be specified on this property.
-
- Conformance: This property MUST be specified in "STANDARD" and
- "DAYLIGHT" sub-components.
-
- Description: This property specifies the offset that is in use prior
- to this time observance. It is used to calculate the absolute
- time at which the transition to a given observance takes place.
- This property MUST only be specified in a "VTIMEZONE" calendar
- component. A "VTIMEZONE" calendar component MUST include this
- property. The property value is a signed numeric indicating the
- number of hours and possibly minutes from UTC. Positive numbers
- represent time zones east of the prime meridian, or ahead of UTC.
- Negative numbers represent time zones west of the prime meridian,
- or behind UTC.
-
-
-
-
-Desruisseaux Standards Track [Page 104]
-
-RFC 5545 iCalendar September 2009
-
-
- Format Definition: This property is defined by the following
- notation:
-
- tzoffsetfrom = "TZOFFSETFROM" frmparam ":" utc-offset
- CRLF
-
- frmparam = *(";" other-param)
-
- Example: The following are examples of this property:
-
- TZOFFSETFROM:-0500
-
- TZOFFSETFROM:+1345
-
-3.8.3.4. Time Zone Offset To
-
- Property Name: TZOFFSETTO
-
- Purpose: This property specifies the offset that is in use in this
- time zone observance.
-
- Value Type: UTC-OFFSET
-
- Property Parameters: IANA and non-standard property parameters can
- be specified on this property.
-
- Conformance: This property MUST be specified in "STANDARD" and
- "DAYLIGHT" sub-components.
-
- Description: This property specifies the offset that is in use in
- this time zone observance. It is used to calculate the absolute
- time for the new observance. The property value is a signed
- numeric indicating the number of hours and possibly minutes from
- UTC. Positive numbers represent time zones east of the prime
- meridian, or ahead of UTC. Negative numbers represent time zones
- west of the prime meridian, or behind UTC.
-
- Format Definition: This property is defined by the following
- notation:
-
- tzoffsetto = "TZOFFSETTO" toparam ":" utc-offset CRLF
-
- toparam = *(";" other-param)
-
-
-
-
-
-
-
-
-Desruisseaux Standards Track [Page 105]
-
-RFC 5545 iCalendar September 2009
-
-
- Example: The following are examples of this property:
-
- TZOFFSETTO:-0400
-
- TZOFFSETTO:+1245
-
-3.8.3.5. Time Zone URL
-
- Property Name: TZURL
-
- Purpose: This property provides a means for a "VTIMEZONE" component
- to point to a network location that can be used to retrieve an up-
- to-date version of itself.
-
- Value Type: URI
-
- Property Parameters: IANA and non-standard property parameters can
- be specified on this property.
-
- Conformance: This property can be specified in a "VTIMEZONE"
- calendar component.
-
- Description: This property provides a means for a "VTIMEZONE"
- component to point to a network location that can be used to
- retrieve an up-to-date version of itself. This provides a hook to
- handle changes government bodies impose upon time zone
- definitions. Retrieval of this resource results in an iCalendar
- object containing a single "VTIMEZONE" component and a "METHOD"
- property set to PUBLISH.
-
- Format Definition: This property is defined by the following
- notation:
-
- tzurl = "TZURL" tzurlparam ":" uri CRLF
-
- tzurlparam = *(";" other-param)
-
- Example: The following is an example of this property:
-
- TZURL:http://timezones.example.org/tz/America-Los_Angeles.ics
-
-3.8.4. Relationship Component Properties
-
- The following properties specify relationship information in calendar
- components.
-
-
-
-
-
-
-Desruisseaux Standards Track [Page 106]
-
-RFC 5545 iCalendar September 2009
-
-
-3.8.4.1. Attendee
-
- Property Name: ATTENDEE
-
- Purpose: This property defines an "Attendee" within a calendar
- component.
-
- Value Type: CAL-ADDRESS
-
- Property Parameters: IANA, non-standard, language, calendar user
- type, group or list membership, participation role, participation
- status, RSVP expectation, delegatee, delegator, sent by, common
- name, or directory entry reference property parameters can be
- specified on this property.
-
- Conformance: This property MUST be specified in an iCalendar object
- that specifies a group-scheduled calendar entity. This property
- MUST NOT be specified in an iCalendar object when publishing the
- calendar information (e.g., NOT in an iCalendar object that
- specifies the publication of a calendar user's busy time, event,
- to-do, or journal). This property is not specified in an
- iCalendar object that specifies only a time zone definition or
- that defines calendar components that are not group-scheduled
- components, but are components only on a single user's calendar.
-
- Description: This property MUST only be specified within calendar
- components to specify participants, non-participants, and the
- chair of a group-scheduled calendar entity. The property is
- specified within an "EMAIL" category of the "VALARM" calendar
- component to specify an email address that is to receive the email
- type of iCalendar alarm.
-
- The property parameter "CN" is for the common or displayable name
- associated with the calendar address; "ROLE", for the intended
- role that the attendee will have in the calendar component;
- "PARTSTAT", for the status of the attendee's participation;
- "RSVP", for indicating whether the favor of a reply is requested;
- "CUTYPE", to indicate the type of calendar user; "MEMBER", to
- indicate the groups that the attendee belongs to; "DELEGATED-TO",
- to indicate the calendar users that the original request was
- delegated to; and "DELEGATED-FROM", to indicate whom the request
- was delegated from; "SENT-BY", to indicate whom is acting on
- behalf of the "ATTENDEE"; and "DIR", to indicate the URI that
- points to the directory information corresponding to the attendee.
- These property parameters can be specified on an "ATTENDEE"
- property in either a "VEVENT", "VTODO", or "VJOURNAL" calendar
- component. They MUST NOT be specified in an "ATTENDEE" property
- in a "VFREEBUSY" or "VALARM" calendar component. If the
-
-
-
-Desruisseaux Standards Track [Page 107]
-
-RFC 5545 iCalendar September 2009
-
-
- "LANGUAGE" property parameter is specified, the identified
- language applies to the "CN" parameter.
-
- A recipient delegated a request MUST inherit the "RSVP" and "ROLE"
- values from the attendee that delegated the request to them.
-
- Multiple attendees can be specified by including multiple
- "ATTENDEE" properties within the calendar component.
-
- Format Definition: This property is defined by the following
- notation:
-
- attendee = "ATTENDEE" attparam ":" cal-address CRLF
-
- attparam = *(
- ;
- ; The following are OPTIONAL,
- ; but MUST NOT occur more than once.
- ;
- (";" cutypeparam) / (";" memberparam) /
- (";" roleparam) / (";" partstatparam) /
- (";" rsvpparam) / (";" deltoparam) /
- (";" delfromparam) / (";" sentbyparam) /
- (";" cnparam) / (";" dirparam) /
- (";" languageparam) /
- ;
- ; The following is OPTIONAL,
- ; and MAY occur more than once.
- ;
- (";" other-param)
- ;
- )
-
- Example: The following are examples of this property's use for a
- to-do:
-
- ATTENDEE;MEMBER="mailto:DEV-GROUP@example.com":
- mailto:joecool@example.com
- ATTENDEE;DELEGATED-FROM="mailto:immud@example.com":
- mailto:ildoit@example.com
-
-
-
-
-
-
-
-
-
-
-
-Desruisseaux Standards Track [Page 108]
-
-RFC 5545 iCalendar September 2009
-
-
- The following is an example of this property used for specifying
- multiple attendees to an event:
-
- ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=TENTATIVE;CN=Henry
- Cabot:mailto:hcabot@example.com
- ATTENDEE;ROLE=REQ-PARTICIPANT;DELEGATED-FROM="mailto:bob@
- example.com";PARTSTAT=ACCEPTED;CN=Jane Doe:mailto:jdoe@
- example.com
-
- The following is an example of this property with a URI to the
- directory information associated with the attendee:
-
- ATTENDEE;CN=John Smith;DIR="ldap://example.com:6666/o=ABC%
- 20Industries,c=US???(cn=Jim%20Dolittle)":mailto:jimdo@
- example.com
-
- The following is an example of this property with "delegatee" and
- "delegator" information for an event:
-
- ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=TENTATIVE;DELEGATED-FROM=
- "mailto:iamboss@example.com";CN=Henry Cabot:mailto:hcabot@
- example.com
- ATTENDEE;ROLE=NON-PARTICIPANT;PARTSTAT=DELEGATED;DELEGATED-TO=
- "mailto:hcabot@example.com";CN=The Big Cheese:mailto:iamboss
- @example.com
- ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;CN=Jane Doe
- :mailto:jdoe@example.com
-
- Example: The following is an example of this property's use when
- another calendar user is acting on behalf of the "Attendee":
-
- ATTENDEE;SENT-BY=mailto:jan_doe@example.com;CN=John Smith:
- mailto:jsmith@example.com
-
-3.8.4.2. Contact
-
- Property Name: CONTACT
-
- Purpose: This property is used to represent contact information or
- alternately a reference to contact information associated with the
- calendar component.
-
- Value Type: TEXT
-
- Property Parameters: IANA, non-standard, alternate text
- representation, and language property parameters can be specified
- on this property.
-
-
-
-
-Desruisseaux Standards Track [Page 109]
-
-RFC 5545 iCalendar September 2009
-
-
- Conformance: This property can be specified in a "VEVENT", "VTODO",
- "VJOURNAL", or "VFREEBUSY" calendar component.
-
- Description: The property value consists of textual contact
- information. An alternative representation for the property value
- can also be specified that refers to a URI pointing to an
- alternate form, such as a vCard [RFC2426], for the contact
- information.
-
- Format Definition: This property is defined by the following
- notation:
-
- contact = "CONTACT" contparam ":" text CRLF
-
- contparam = *(
- ;
- ; The following are OPTIONAL,
- ; but MUST NOT occur more than once.
- ;
- (";" altrepparam) / (";" languageparam) /
- ;
- ; The following is OPTIONAL,
- ; and MAY occur more than once.
- ;
- (";" other-param)
- ;
- )
-
- Example: The following is an example of this property referencing
- textual contact information:
-
- CONTACT:Jim Dolittle\, ABC Industries\, +1-919-555-1234
-
- The following is an example of this property with an alternate
- representation of an LDAP URI to a directory entry containing the
- contact information:
-
- CONTACT;ALTREP="ldap://example.com:6666/o=ABC%20Industries\,
- c=US???(cn=Jim%20Dolittle)":Jim Dolittle\, ABC Industries\,
- +1-919-555-1234
-
- The following is an example of this property with an alternate
- representation of a MIME body part containing the contact
- information, such as a vCard [RFC2426] embedded in a text/
- directory media type [RFC2425]:
-
- CONTACT;ALTREP="CID:part3.msg970930T083000SILVER@example.com":
- Jim Dolittle\, ABC Industries\, +1-919-555-1234
-
-
-
-Desruisseaux Standards Track [Page 110]
-
-RFC 5545 iCalendar September 2009
-
-
- The following is an example of this property referencing a network
- resource, such as a vCard [RFC2426] object containing the contact
- information:
-
- CONTACT;ALTREP="http://example.com/pdi/jdoe.vcf":Jim
- Dolittle\, ABC Industries\, +1-919-555-1234
-
-3.8.4.3. Organizer
-
- Property Name: ORGANIZER
-
- Purpose: This property defines the organizer for a calendar
- component.
-
- Value Type: CAL-ADDRESS
-
- Property Parameters: IANA, non-standard, language, common name,
- directory entry reference, and sent-by property parameters can be
- specified on this property.
-
- Conformance: This property MUST be specified in an iCalendar object
- that specifies a group-scheduled calendar entity. This property
- MUST be specified in an iCalendar object that specifies the
- publication of a calendar user's busy time. This property MUST
- NOT be specified in an iCalendar object that specifies only a time
- zone definition or that defines calendar components that are not
- group-scheduled components, but are components only on a single
- user's calendar.
-
- Description: This property is specified within the "VEVENT",
- "VTODO", and "VJOURNAL" calendar components to specify the
- organizer of a group-scheduled calendar entity. The property is
- specified within the "VFREEBUSY" calendar component to specify the
- calendar user requesting the free or busy time. When publishing a
- "VFREEBUSY" calendar component, the property is used to specify
- the calendar that the published busy time came from.
-
- The property has the property parameters "CN", for specifying the
- common or display name associated with the "Organizer", "DIR", for
- specifying a pointer to the directory information associated with
- the "Organizer", "SENT-BY", for specifying another calendar user
- that is acting on behalf of the "Organizer". The non-standard
- parameters may also be specified on this property. If the
- "LANGUAGE" property parameter is specified, the identified
- language applies to the "CN" parameter value.
-
-
-
-
-
-
-Desruisseaux Standards Track [Page 111]
-
-RFC 5545 iCalendar September 2009
-
-
- Format Definition: This property is defined by the following
- notation:
-
- organizer = "ORGANIZER" orgparam ":"
- cal-address CRLF
-
- orgparam = *(
- ;
- ; The following are OPTIONAL,
- ; but MUST NOT occur more than once.
- ;
- (";" cnparam) / (";" dirparam) / (";" sentbyparam) /
- (";" languageparam) /
- ;
- ; The following is OPTIONAL,
- ; and MAY occur more than once.
- ;
- (";" other-param)
- ;
- )
-
- Example: The following is an example of this property:
-
- ORGANIZER;CN=John Smith:mailto:jsmith@example.com
-
- The following is an example of this property with a pointer to the
- directory information associated with the organizer:
-
- ORGANIZER;CN=JohnSmith;DIR="ldap://example.com:6666/o=DC%20Ass
- ociates,c=US???(cn=John%20Smith)":mailto:jsmith@example.com
-
- The following is an example of this property used by another
- calendar user who is acting on behalf of the organizer, with
- responses intended to be sent back to the organizer, not the other
- calendar user:
-
- ORGANIZER;SENT-BY="mailto:jane_doe@example.com":
- mailto:jsmith@example.com
-
-3.8.4.4. Recurrence ID
-
- Property Name: RECURRENCE-ID
-
- Purpose: This property is used in conjunction with the "UID" and
- "SEQUENCE" properties to identify a specific instance of a
- recurring "VEVENT", "VTODO", or "VJOURNAL" calendar component.
- The property value is the original value of the "DTSTART" property
- of the recurrence instance.
-
-
-
-Desruisseaux Standards Track [Page 112]
-
-RFC 5545 iCalendar September 2009
-
-
- Value Type: The default value type is DATE-TIME. The value type can
- be set to a DATE value type. This property MUST have the same
- value type as the "DTSTART" property contained within the
- recurring component. Furthermore, this property MUST be specified
- as a date with local time if and only if the "DTSTART" property
- contained within the recurring component is specified as a date
- with local time.
-
- Property Parameters: IANA, non-standard, value data type, time zone
- identifier, and recurrence identifier range parameters can be
- specified on this property.
-
- Conformance: This property can be specified in an iCalendar object
- containing a recurring calendar component.
-
- Description: The full range of calendar components specified by a
- recurrence set is referenced by referring to just the "UID"
- property value corresponding to the calendar component. The
- "RECURRENCE-ID" property allows the reference to an individual
- instance within the recurrence set.
-
- If the value of the "DTSTART" property is a DATE type value, then
- the value MUST be the calendar date for the recurrence instance.
-
- The DATE-TIME value is set to the time when the original
- recurrence instance would occur; meaning that if the intent is to
- change a Friday meeting to Thursday, the DATE-TIME is still set to
- the original Friday meeting.
-
- The "RECURRENCE-ID" property is used in conjunction with the "UID"
- and "SEQUENCE" properties to identify a particular instance of a
- recurring event, to-do, or journal. For a given pair of "UID" and
- "SEQUENCE" property values, the "RECURRENCE-ID" value for a
- recurrence instance is fixed.
-
- The "RANGE" parameter is used to specify the effective range of
- recurrence instances from the instance specified by the
- "RECURRENCE-ID" property value. The value for the range parameter
- can only be "THISANDFUTURE" to indicate a range defined by the
- given recurrence instance and all subsequent instances.
- Subsequent instances are determined by their "RECURRENCE-ID" value
- and not their current scheduled start time. Subsequent instances
- defined in separate components are not impacted by the given
- recurrence instance. When the given recurrence instance is
- rescheduled, all subsequent instances are also rescheduled by the
- same time difference. For instance, if the given recurrence
- instance is rescheduled to start 2 hours later, then all
- subsequent instances are also rescheduled 2 hours later.
-
-
-
-Desruisseaux Standards Track [Page 113]
-
-RFC 5545 iCalendar September 2009
-
-
- Similarly, if the duration of the given recurrence instance is
- modified, then all subsequence instances are also modified to have
- this same duration.
-
- Note: The "RANGE" parameter may not be appropriate to
- reschedule specific subsequent instances of complex recurring
- calendar component. Assuming an unbounded recurring calendar
- component scheduled to occur on Mondays and Wednesdays, the
- "RANGE" parameter could not be used to reschedule only the
- future Monday instances to occur on Tuesday instead. In such
- cases, the calendar application could simply truncate the
- unbounded recurring calendar component (i.e., with the "COUNT"
- or "UNTIL" rule parts), and create two new unbounded recurring
- calendar components for the future instances.
-
- Format Definition: This property is defined by the following
- notation:
-
- recurid = "RECURRENCE-ID" ridparam ":" ridval CRLF
-
- ridparam = *(
- ;
- ; The following are OPTIONAL,
- ; but MUST NOT occur more than once.
- ;
- (";" "VALUE" "=" ("DATE-TIME" / "DATE")) /
- (";" tzidparam) / (";" rangeparam) /
- ;
- ; The following is OPTIONAL,
- ; and MAY occur more than once.
- ;
- (";" other-param)
- ;
- )
-
- ridval = date-time / date
- ;Value MUST match value type
-
- Example: The following are examples of this property:
-
- RECURRENCE-ID;VALUE=DATE:19960401
-
- RECURRENCE-ID;RANGE=THISANDFUTURE:19960120T120000Z
-
-
-
-
-
-
-
-
-Desruisseaux Standards Track [Page 114]
-
-RFC 5545 iCalendar September 2009
-
-
-3.8.4.5. Related To
-
- Property Name: RELATED-TO
-
- Purpose: This property is used to represent a relationship or
- reference between one calendar component and another.
-
- Value Type: TEXT
-
- Property Parameters: IANA, non-standard, and relationship type
- property parameters can be specified on this property.
-
- Conformance: This property can be specified in the "VEVENT",
- "VTODO", and "VJOURNAL" calendar components.
-
- Description: The property value consists of the persistent, globally
- unique identifier of another calendar component. This value would
- be represented in a calendar component by the "UID" property.
-
- By default, the property value points to another calendar
- component that has a PARENT relationship to the referencing
- object. The "RELTYPE" property parameter is used to either
- explicitly state the default PARENT relationship type to the
- referenced calendar component or to override the default PARENT
- relationship type and specify either a CHILD or SIBLING
- relationship. The PARENT relationship indicates that the calendar
- component is a subordinate of the referenced calendar component.
- The CHILD relationship indicates that the calendar component is a
- superior of the referenced calendar component. The SIBLING
- relationship indicates that the calendar component is a peer of
- the referenced calendar component.
-
- Changes to a calendar component referenced by this property can
- have an implicit impact on the related calendar component. For
- example, if a group event changes its start or end date or time,
- then the related, dependent events will need to have their start
- and end dates changed in a corresponding way. Similarly, if a
- PARENT calendar component is cancelled or deleted, then there is
- an implied impact to the related CHILD calendar components. This
- property is intended only to provide information on the
- relationship of calendar components. It is up to the target
- calendar system to maintain any property implications of this
- relationship.
-
-
-
-
-
-
-
-
-Desruisseaux Standards Track [Page 115]
-
-RFC 5545 iCalendar September 2009
-
-
- Format Definition: This property is defined by the following
- notation:
-
- related = "RELATED-TO" relparam ":" text CRLF
-
- relparam = *(
- ;
- ; The following is OPTIONAL,
- ; but MUST NOT occur more than once.
- ;
- (";" reltypeparam) /
- ;
- ; The following is OPTIONAL,
- ; and MAY occur more than once.
- ;
- (";" other-param)
- ;
- )
-
- The following is an example of this property:
-
- RELATED-TO:jsmith.part7.19960817T083000.xyzMail@example.com
-
- RELATED-TO:19960401-080045-4000F192713-0052@example.com
-
-3.8.4.6. Uniform Resource Locator
-
- Property Name: URL
-
- Purpose: This property defines a Uniform Resource Locator (URL)
- associated with the iCalendar object.
-
- Value Type: URI
-
- Property Parameters: IANA and non-standard property parameters can
- be specified on this property.
-
- Conformance: This property can be specified once in the "VEVENT",
- "VTODO", "VJOURNAL", or "VFREEBUSY" calendar components.
-
- Description: This property may be used in a calendar component to
- convey a location where a more dynamic rendition of the calendar
- information associated with the calendar component can be found.
- This memo does not attempt to standardize the form of the URI, nor
- the format of the resource pointed to by the property value. If
- the URL property and Content-Location MIME header are both
- specified, they MUST point to the same resource.
-
-
-
-
-Desruisseaux Standards Track [Page 116]
-
-RFC 5545 iCalendar September 2009
-
-
- Format Definition: This property is defined by the following
- notation:
-
- url = "URL" urlparam ":" uri CRLF
-
- urlparam = *(";" other-param)
-
- Example: The following is an example of this property:
-
- URL:http://example.com/pub/calendars/jsmith/mytime.ics
-
-3.8.4.7. Unique Identifier
-
- Property Name: UID
-
- Purpose: This property defines the persistent, globally unique
- identifier for the calendar component.
-
- Value Type: TEXT
-
- Property Parameters: IANA and non-standard property parameters can
- be specified on this property.
-
- Conformance: The property MUST be specified in the "VEVENT",
- "VTODO", "VJOURNAL", or "VFREEBUSY" calendar components.
-
- Description: The "UID" itself MUST be a globally unique identifier.
- The generator of the identifier MUST guarantee that the identifier
- is unique. There are several algorithms that can be used to
- accomplish this. A good method to assure uniqueness is to put the
- domain name or a domain literal IP address of the host on which
- the identifier was created on the right-hand side of an "@", and
- on the left-hand side, put a combination of the current calendar
- date and time of day (i.e., formatted in as a DATE-TIME value)
- along with some other currently unique (perhaps sequential)
- identifier available on the system (for example, a process id
- number). Using a DATE-TIME value on the left-hand side and a
- domain name or domain literal on the right-hand side makes it
- possible to guarantee uniqueness since no two hosts should be
- using the same domain name or IP address at the same time. Though
- other algorithms will work, it is RECOMMENDED that the right-hand
- side contain some domain identifier (either of the host itself or
- otherwise) such that the generator of the message identifier can
- guarantee the uniqueness of the left-hand side within the scope of
- that domain.
-
- This is the method for correlating scheduling messages with the
- referenced "VEVENT", "VTODO", or "VJOURNAL" calendar component.
-
-
-
-Desruisseaux Standards Track [Page 117]
-
-RFC 5545 iCalendar September 2009
-
-
- The full range of calendar components specified by a recurrence
- set is referenced by referring to just the "UID" property value
- corresponding to the calendar component. The "RECURRENCE-ID"
- property allows the reference to an individual instance within the
- recurrence set.
-
- This property is an important method for group-scheduling
- applications to match requests with later replies, modifications,
- or deletion requests. Calendaring and scheduling applications
- MUST generate this property in "VEVENT", "VTODO", and "VJOURNAL"
- calendar components to assure interoperability with other group-
- scheduling applications. This identifier is created by the
- calendar system that generates an iCalendar object.
-
- Implementations MUST be able to receive and persist values of at
- least 255 octets for this property, but they MUST NOT truncate
- values in the middle of a UTF-8 multi-octet sequence.
-
- Format Definition: This property is defined by the following
- notation:
-
- uid = "UID" uidparam ":" text CRLF
-
- uidparam = *(";" other-param)
-
- Example: The following is an example of this property:
-
- UID:19960401T080045Z-4000F192713-0052@example.com
-
-3.8.5. Recurrence Component Properties
-
- The following properties specify recurrence information in calendar
- components.
-
-3.8.5.1. Exception Date-Times
-
- Property Name: EXDATE
-
- Purpose: This property defines the list of DATE-TIME exceptions for
- recurring events, to-dos, journal entries, or time zone
- definitions.
-
- Value Type: The default value type for this property is DATE-TIME.
- The value type can be set to DATE.
-
- Property Parameters: IANA, non-standard, value data type, and time
- zone identifier property parameters can be specified on this
- property.
-
-
-
-Desruisseaux Standards Track [Page 118]
-
-RFC 5545 iCalendar September 2009
-
-
- Conformance: This property can be specified in recurring "VEVENT",
- "VTODO", and "VJOURNAL" calendar components as well as in the
- "STANDARD" and "DAYLIGHT" sub-components of the "VTIMEZONE"
- calendar component.
-
- Description: The exception dates, if specified, are used in
- computing the recurrence set. The recurrence set is the complete
- set of recurrence instances for a calendar component. The
- recurrence set is generated by considering the initial "DTSTART"
- property along with the "RRULE", "RDATE", and "EXDATE" properties
- contained within the recurring component. The "DTSTART" property
- defines the first instance in the recurrence set. The "DTSTART"
- property value SHOULD match the pattern of the recurrence rule, if
- specified. The recurrence set generated with a "DTSTART" property
- value that doesn't match the pattern of the rule is undefined.
- The final recurrence set is generated by gathering all of the
- start DATE-TIME values generated by any of the specified "RRULE"
- and "RDATE" properties, and then excluding any start DATE-TIME
- values specified by "EXDATE" properties. This implies that start
- DATE-TIME values specified by "EXDATE" properties take precedence
- over those specified by inclusion properties (i.e., "RDATE" and
- "RRULE"). When duplicate instances are generated by the "RRULE"
- and "RDATE" properties, only one recurrence is considered.
- Duplicate instances are ignored.
-
- The "EXDATE" property can be used to exclude the value specified
- in "DTSTART". However, in such cases, the original "DTSTART" date
- MUST still be maintained by the calendaring and scheduling system
- because the original "DTSTART" value has inherent usage
- dependencies by other properties such as the "RECURRENCE-ID".
-
- Format Definition: This property is defined by the following
- notation:
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Desruisseaux Standards Track [Page 119]
-
-RFC 5545 iCalendar September 2009
-
-
- exdate = "EXDATE" exdtparam ":" exdtval *("," exdtval) CRLF
-
- exdtparam = *(
- ;
- ; The following are OPTIONAL,
- ; but MUST NOT occur more than once.
- ;
- (";" "VALUE" "=" ("DATE-TIME" / "DATE")) /
- ;
- (";" tzidparam) /
- ;
- ; The following is OPTIONAL,
- ; and MAY occur more than once.
- ;
- (";" other-param)
- ;
- )
-
- exdtval = date-time / date
- ;Value MUST match value type
-
- Example: The following is an example of this property:
-
- EXDATE:19960402T010000Z,19960403T010000Z,19960404T010000Z
-
-3.8.5.2. Recurrence Date-Times
-
- Property Name: RDATE
-
- Purpose: This property defines the list of DATE-TIME values for
- recurring events, to-dos, journal entries, or time zone
- definitions.
-
- Value Type: The default value type for this property is DATE-TIME.
- The value type can be set to DATE or PERIOD.
-
- Property Parameters: IANA, non-standard, value data type, and time
- zone identifier property parameters can be specified on this
- property.
-
- Conformance: This property can be specified in recurring "VEVENT",
- "VTODO", and "VJOURNAL" calendar components as well as in the
- "STANDARD" and "DAYLIGHT" sub-components of the "VTIMEZONE"
- calendar component.
-
- Description: This property can appear along with the "RRULE"
- property to define an aggregate set of repeating occurrences.
- When they both appear in a recurring component, the recurrence
-
-
-
-Desruisseaux Standards Track [Page 120]
-
-RFC 5545 iCalendar September 2009
-
-
- instances are defined by the union of occurrences defined by both
- the "RDATE" and "RRULE".
-
- The recurrence dates, if specified, are used in computing the
- recurrence set. The recurrence set is the complete set of
- recurrence instances for a calendar component. The recurrence set
- is generated by considering the initial "DTSTART" property along
- with the "RRULE", "RDATE", and "EXDATE" properties contained
- within the recurring component. The "DTSTART" property defines
- the first instance in the recurrence set. The "DTSTART" property
- value SHOULD match the pattern of the recurrence rule, if
- specified. The recurrence set generated with a "DTSTART" property
- value that doesn't match the pattern of the rule is undefined.
- The final recurrence set is generated by gathering all of the
- start DATE-TIME values generated by any of the specified "RRULE"
- and "RDATE" properties, and then excluding any start DATE-TIME
- values specified by "EXDATE" properties. This implies that start
- DATE-TIME values specified by "EXDATE" properties take precedence
- over those specified by inclusion properties (i.e., "RDATE" and
- "RRULE"). Where duplicate instances are generated by the "RRULE"
- and "RDATE" properties, only one recurrence is considered.
- Duplicate instances are ignored.
-
- Format Definition: This property is defined by the following
- notation:
-
- rdate = "RDATE" rdtparam ":" rdtval *("," rdtval) CRLF
-
- rdtparam = *(
- ;
- ; The following are OPTIONAL,
- ; but MUST NOT occur more than once.
- ;
- (";" "VALUE" "=" ("DATE-TIME" / "DATE" / "PERIOD")) /
- (";" tzidparam) /
- ;
- ; The following is OPTIONAL,
- ; and MAY occur more than once.
- ;
- (";" other-param)
- ;
- )
-
- rdtval = date-time / date / period
- ;Value MUST match value type
-
-
-
-
-
-
-Desruisseaux Standards Track [Page 121]
-
-RFC 5545 iCalendar September 2009
-
-
- Example: The following are examples of this property:
-
- RDATE:19970714T123000Z
- RDATE;TZID=America/New_York:19970714T083000
-
- RDATE;VALUE=PERIOD:19960403T020000Z/19960403T040000Z,
- 19960404T010000Z/PT3H
-
- RDATE;VALUE=DATE:19970101,19970120,19970217,19970421
- 19970526,19970704,19970901,19971014,19971128,19971129,19971225
-
-3.8.5.3. Recurrence Rule
-
- Property Name: RRULE
-
- Purpose: This property defines a rule or repeating pattern for
- recurring events, to-dos, journal entries, or time zone
- definitions.
-
- Value Type: RECUR
-
- Property Parameters: IANA and non-standard property parameters can
- be specified on this property.
-
- Conformance: This property can be specified in recurring "VEVENT",
- "VTODO", and "VJOURNAL" calendar components as well as in the
- "STANDARD" and "DAYLIGHT" sub-components of the "VTIMEZONE"
- calendar component, but it SHOULD NOT be specified more than once.
- The recurrence set generated with multiple "RRULE" properties is
- undefined.
-
- Description: The recurrence rule, if specified, is used in computing
- the recurrence set. The recurrence set is the complete set of
- recurrence instances for a calendar component. The recurrence set
- is generated by considering the initial "DTSTART" property along
- with the "RRULE", "RDATE", and "EXDATE" properties contained
- within the recurring component. The "DTSTART" property defines
- the first instance in the recurrence set. The "DTSTART" property
- value SHOULD be synchronized with the recurrence rule, if
- specified. The recurrence set generated with a "DTSTART" property
- value not synchronized with the recurrence rule is undefined. The
- final recurrence set is generated by gathering all of the start
- DATE-TIME values generated by any of the specified "RRULE" and
- "RDATE" properties, and then excluding any start DATE-TIME values
- specified by "EXDATE" properties. This implies that start DATE-
- TIME values specified by "EXDATE" properties take precedence over
- those specified by inclusion properties (i.e., "RDATE" and
- "RRULE"). Where duplicate instances are generated by the "RRULE"
-
-
-
-Desruisseaux Standards Track [Page 122]
-
-RFC 5545 iCalendar September 2009
-
-
- and "RDATE" properties, only one recurrence is considered.
- Duplicate instances are ignored.
-
- The "DTSTART" property specified within the iCalendar object
- defines the first instance of the recurrence. In most cases, a
- "DTSTART" property of DATE-TIME value type used with a recurrence
- rule, should be specified as a date with local time and time zone
- reference to make sure all the recurrence instances start at the
- same local time regardless of time zone changes.
-
- If the duration of the recurring component is specified with the
- "DTEND" or "DUE" property, then the same exact duration will apply
- to all the members of the generated recurrence set. Else, if the
- duration of the recurring component is specified with the
- "DURATION" property, then the same nominal duration will apply to
- all the members of the generated recurrence set and the exact
- duration of each recurrence instance will depend on its specific
- start time. For example, recurrence instances of a nominal
- duration of one day will have an exact duration of more or less
- than 24 hours on a day where a time zone shift occurs. The
- duration of a specific recurrence may be modified in an exception
- component or simply by using an "RDATE" property of PERIOD value
- type.
-
- Format Definition: This property is defined by the following
- notation:
-
- rrule = "RRULE" rrulparam ":" recur CRLF
-
- rrulparam = *(";" other-param)
-
- Example: All examples assume the Eastern United States time zone.
-
- Daily for 10 occurrences:
-
- DTSTART;TZID=America/New_York:19970902T090000
- RRULE:FREQ=DAILY;COUNT=10
-
- ==> (1997 9:00 AM EDT) September 2-11
-
- Daily until December 24, 1997:
-
- DTSTART;TZID=America/New_York:19970902T090000
- RRULE:FREQ=DAILY;UNTIL=19971224T000000Z
-
- ==> (1997 9:00 AM EDT) September 2-30;October 1-25
- (1997 9:00 AM EST) October 26-31;November 1-30;December 1-23
-
-
-
-
-Desruisseaux Standards Track [Page 123]
-
-RFC 5545 iCalendar September 2009
-
-
- Every other day - forever:
-
- DTSTART;TZID=America/New_York:19970902T090000
- RRULE:FREQ=DAILY;INTERVAL=2
-
- ==> (1997 9:00 AM EDT) September 2,4,6,8...24,26,28,30;
- October 2,4,6...20,22,24
- (1997 9:00 AM EST) October 26,28,30;
- November 1,3,5,7...25,27,29;
- December 1,3,...
-
- Every 10 days, 5 occurrences:
-
- DTSTART;TZID=America/New_York:19970902T090000
- RRULE:FREQ=DAILY;INTERVAL=10;COUNT=5
-
- ==> (1997 9:00 AM EDT) September 2,12,22;
- October 2,12
-
- Every day in January, for 3 years:
-
- DTSTART;TZID=America/New_York:19980101T090000
-
- RRULE:FREQ=YEARLY;UNTIL=20000131T140000Z;
- BYMONTH=1;BYDAY=SU,MO,TU,WE,TH,FR,SA
- or
- RRULE:FREQ=DAILY;UNTIL=20000131T140000Z;BYMONTH=1
-
- ==> (1998 9:00 AM EST)January 1-31
- (1999 9:00 AM EST)January 1-31
- (2000 9:00 AM EST)January 1-31
-
- Weekly for 10 occurrences:
-
- DTSTART;TZID=America/New_York:19970902T090000
- RRULE:FREQ=WEEKLY;COUNT=10
-
- ==> (1997 9:00 AM EDT) September 2,9,16,23,30;October 7,14,21
- (1997 9:00 AM EST) October 28;November 4
-
-
-
-
-
-
-
-
-
-
-
-
-Desruisseaux Standards Track [Page 124]
-
-RFC 5545 iCalendar September 2009
-
-
- Weekly until December 24, 1997:
-
- DTSTART;TZID=America/New_York:19970902T090000
- RRULE:FREQ=WEEKLY;UNTIL=19971224T000000Z
-
- ==> (1997 9:00 AM EDT) September 2,9,16,23,30;
- October 7,14,21
- (1997 9:00 AM EST) October 28;
- November 4,11,18,25;
- December 2,9,16,23
-
- Every other week - forever:
-
- DTSTART;TZID=America/New_York:19970902T090000
- RRULE:FREQ=WEEKLY;INTERVAL=2;WKST=SU
-
- ==> (1997 9:00 AM EDT) September 2,16,30;
- October 14
- (1997 9:00 AM EST) October 28;
- November 11,25;
- December 9,23
- (1998 9:00 AM EST) January 6,20;
- February 3, 17
- ...
-
- Weekly on Tuesday and Thursday for five weeks:
-
- DTSTART;TZID=America/New_York:19970902T090000
- RRULE:FREQ=WEEKLY;UNTIL=19971007T000000Z;WKST=SU;BYDAY=TU,TH
-
- or
-
- RRULE:FREQ=WEEKLY;COUNT=10;WKST=SU;BYDAY=TU,TH
-
- ==> (1997 9:00 AM EDT) September 2,4,9,11,16,18,23,25,30;
- October 2
-
- Every other week on Monday, Wednesday, and Friday until December
- 24, 1997, starting on Monday, September 1, 1997:
-
- DTSTART;TZID=America/New_York:19970901T090000
- RRULE:FREQ=WEEKLY;INTERVAL=2;UNTIL=19971224T000000Z;WKST=SU;
- BYDAY=MO,WE,FR
-
- ==> (1997 9:00 AM EDT) September 1,3,5,15,17,19,29;
- October 1,3,13,15,17
- (1997 9:00 AM EST) October 27,29,31;
- November 10,12,14,24,26,28;
-
-
-
-Desruisseaux Standards Track [Page 125]
-
-RFC 5545 iCalendar September 2009
-
-
- December 8,10,12,22
-
- Every other week on Tuesday and Thursday, for 8 occurrences:
-
- DTSTART;TZID=America/New_York:19970902T090000
- RRULE:FREQ=WEEKLY;INTERVAL=2;COUNT=8;WKST=SU;BYDAY=TU,TH
-
- ==> (1997 9:00 AM EDT) September 2,4,16,18,30;
- October 2,14,16
-
- Monthly on the first Friday for 10 occurrences:
-
- DTSTART;TZID=America/New_York:19970905T090000
- RRULE:FREQ=MONTHLY;COUNT=10;BYDAY=1FR
-
- ==> (1997 9:00 AM EDT) September 5;October 3
- (1997 9:00 AM EST) November 7;December 5
- (1998 9:00 AM EST) January 2;February 6;March 6;April 3
- (1998 9:00 AM EDT) May 1;June 5
-
- Monthly on the first Friday until December 24, 1997:
-
- DTSTART;TZID=America/New_York:19970905T090000
- RRULE:FREQ=MONTHLY;UNTIL=19971224T000000Z;BYDAY=1FR
-
- ==> (1997 9:00 AM EDT) September 5; October 3
- (1997 9:00 AM EST) November 7; December 5
-
- Every other month on the first and last Sunday of the month for 10
- occurrences:
-
- DTSTART;TZID=America/New_York:19970907T090000
- RRULE:FREQ=MONTHLY;INTERVAL=2;COUNT=10;BYDAY=1SU,-1SU
-
- ==> (1997 9:00 AM EDT) September 7,28
- (1997 9:00 AM EST) November 2,30
- (1998 9:00 AM EST) January 4,25;March 1,29
- (1998 9:00 AM EDT) May 3,31
-
- Monthly on the second-to-last Monday of the month for 6 months:
-
- DTSTART;TZID=America/New_York:19970922T090000
- RRULE:FREQ=MONTHLY;COUNT=6;BYDAY=-2MO
-
- ==> (1997 9:00 AM EDT) September 22;October 20
- (1997 9:00 AM EST) November 17;December 22
- (1998 9:00 AM EST) January 19;February 16
-
-
-
-
-Desruisseaux Standards Track [Page 126]
-
-RFC 5545 iCalendar September 2009
-
-
- Monthly on the third-to-the-last day of the month, forever:
-
- DTSTART;TZID=America/New_York:19970928T090000
- RRULE:FREQ=MONTHLY;BYMONTHDAY=-3
-
- ==> (1997 9:00 AM EDT) September 28
- (1997 9:00 AM EST) October 29;November 28;December 29
- (1998 9:00 AM EST) January 29;February 26
- ...
-
- Monthly on the 2nd and 15th of the month for 10 occurrences:
-
- DTSTART;TZID=America/New_York:19970902T090000
- RRULE:FREQ=MONTHLY;COUNT=10;BYMONTHDAY=2,15
-
- ==> (1997 9:00 AM EDT) September 2,15;October 2,15
- (1997 9:00 AM EST) November 2,15;December 2,15
- (1998 9:00 AM EST) January 2,15
-
- Monthly on the first and last day of the month for 10 occurrences:
-
- DTSTART;TZID=America/New_York:19970930T090000
- RRULE:FREQ=MONTHLY;COUNT=10;BYMONTHDAY=1,-1
-
- ==> (1997 9:00 AM EDT) September 30;October 1
- (1997 9:00 AM EST) October 31;November 1,30;December 1,31
- (1998 9:00 AM EST) January 1,31;February 1
-
- Every 18 months on the 10th thru 15th of the month for 10
- occurrences:
-
- DTSTART;TZID=America/New_York:19970910T090000
- RRULE:FREQ=MONTHLY;INTERVAL=18;COUNT=10;BYMONTHDAY=10,11,12,
- 13,14,15
-
- ==> (1997 9:00 AM EDT) September 10,11,12,13,14,15
- (1999 9:00 AM EST) March 10,11,12,13
-
- Every Tuesday, every other month:
-
- DTSTART;TZID=America/New_York:19970902T090000
- RRULE:FREQ=MONTHLY;INTERVAL=2;BYDAY=TU
-
- ==> (1997 9:00 AM EDT) September 2,9,16,23,30
- (1997 9:00 AM EST) November 4,11,18,25
- (1998 9:00 AM EST) January 6,13,20,27;March 3,10,17,24,31
- ...
-
-
-
-
-Desruisseaux Standards Track [Page 127]
-
-RFC 5545 iCalendar September 2009
-
-
- Yearly in June and July for 10 occurrences:
-
- DTSTART;TZID=America/New_York:19970610T090000
- RRULE:FREQ=YEARLY;COUNT=10;BYMONTH=6,7
-
- ==> (1997 9:00 AM EDT) June 10;July 10
- (1998 9:00 AM EDT) June 10;July 10
- (1999 9:00 AM EDT) June 10;July 10
- (2000 9:00 AM EDT) June 10;July 10
- (2001 9:00 AM EDT) June 10;July 10
-
- Note: Since none of the BYDAY, BYMONTHDAY, or BYYEARDAY
- components are specified, the day is gotten from "DTSTART".
-
- Every other year on January, February, and March for 10
- occurrences:
-
- DTSTART;TZID=America/New_York:19970310T090000
- RRULE:FREQ=YEARLY;INTERVAL=2;COUNT=10;BYMONTH=1,2,3
-
- ==> (1997 9:00 AM EST) March 10
- (1999 9:00 AM EST) January 10;February 10;March 10
- (2001 9:00 AM EST) January 10;February 10;March 10
- (2003 9:00 AM EST) January 10;February 10;March 10
-
- Every third year on the 1st, 100th, and 200th day for 10
- occurrences:
-
- DTSTART;TZID=America/New_York:19970101T090000
- RRULE:FREQ=YEARLY;INTERVAL=3;COUNT=10;BYYEARDAY=1,100,200
-
- ==> (1997 9:00 AM EST) January 1
- (1997 9:00 AM EDT) April 10;July 19
- (2000 9:00 AM EST) January 1
- (2000 9:00 AM EDT) April 9;July 18
- (2003 9:00 AM EST) January 1
- (2003 9:00 AM EDT) April 10;July 19
- (2006 9:00 AM EST) January 1
-
- Every 20th Monday of the year, forever:
-
- DTSTART;TZID=America/New_York:19970519T090000
- RRULE:FREQ=YEARLY;BYDAY=20MO
-
- ==> (1997 9:00 AM EDT) May 19
- (1998 9:00 AM EDT) May 18
- (1999 9:00 AM EDT) May 17
- ...
-
-
-
-Desruisseaux Standards Track [Page 128]
-
-RFC 5545 iCalendar September 2009
-
-
- Monday of week number 20 (where the default start of the week is
- Monday), forever:
-
- DTSTART;TZID=America/New_York:19970512T090000
- RRULE:FREQ=YEARLY;BYWEEKNO=20;BYDAY=MO
-
- ==> (1997 9:00 AM EDT) May 12
- (1998 9:00 AM EDT) May 11
- (1999 9:00 AM EDT) May 17
- ...
-
- Every Thursday in March, forever:
-
- DTSTART;TZID=America/New_York:19970313T090000
- RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=TH
-
- ==> (1997 9:00 AM EST) March 13,20,27
- (1998 9:00 AM EST) March 5,12,19,26
- (1999 9:00 AM EST) March 4,11,18,25
- ...
-
- Every Thursday, but only during June, July, and August, forever:
-
- DTSTART;TZID=America/New_York:19970605T090000
- RRULE:FREQ=YEARLY;BYDAY=TH;BYMONTH=6,7,8
-
- ==> (1997 9:00 AM EDT) June 5,12,19,26;July 3,10,17,24,31;
- August 7,14,21,28
- (1998 9:00 AM EDT) June 4,11,18,25;July 2,9,16,23,30;
- August 6,13,20,27
- (1999 9:00 AM EDT) June 3,10,17,24;July 1,8,15,22,29;
- August 5,12,19,26
- ...
-
- Every Friday the 13th, forever:
-
- DTSTART;TZID=America/New_York:19970902T090000
- EXDATE;TZID=America/New_York:19970902T090000
- RRULE:FREQ=MONTHLY;BYDAY=FR;BYMONTHDAY=13
-
- ==> (1998 9:00 AM EST) February 13;March 13;November 13
- (1999 9:00 AM EDT) August 13
- (2000 9:00 AM EDT) October 13
- ...
-
-
-
-
-
-
-
-Desruisseaux Standards Track [Page 129]
-
-RFC 5545 iCalendar September 2009
-
-
- The first Saturday that follows the first Sunday of the month,
- forever:
-
- DTSTART;TZID=America/New_York:19970913T090000
- RRULE:FREQ=MONTHLY;BYDAY=SA;BYMONTHDAY=7,8,9,10,11,12,13
-
- ==> (1997 9:00 AM EDT) September 13;October 11
- (1997 9:00 AM EST) November 8;December 13
- (1998 9:00 AM EST) January 10;February 7;March 7
- (1998 9:00 AM EDT) April 11;May 9;June 13...
- ...
-
- Every 4 years, the first Tuesday after a Monday in November,
- forever (U.S. Presidential Election day):
-
- DTSTART;TZID=America/New_York:19961105T090000
- RRULE:FREQ=YEARLY;INTERVAL=4;BYMONTH=11;BYDAY=TU;
- BYMONTHDAY=2,3,4,5,6,7,8
-
- ==> (1996 9:00 AM EST) November 5
- (2000 9:00 AM EST) November 7
- (2004 9:00 AM EST) November 2
- ...
-
- The third instance into the month of one of Tuesday, Wednesday, or
- Thursday, for the next 3 months:
-
- DTSTART;TZID=America/New_York:19970904T090000
- RRULE:FREQ=MONTHLY;COUNT=3;BYDAY=TU,WE,TH;BYSETPOS=3
-
- ==> (1997 9:00 AM EDT) September 4;October 7
- (1997 9:00 AM EST) November 6
-
- The second-to-last weekday of the month:
-
- DTSTART;TZID=America/New_York:19970929T090000
- RRULE:FREQ=MONTHLY;BYDAY=MO,TU,WE,TH,FR;BYSETPOS=-2
-
- ==> (1997 9:00 AM EDT) September 29
- (1997 9:00 AM EST) October 30;November 27;December 30
- (1998 9:00 AM EST) January 29;February 26;March 30
- ...
-
-
-
-
-
-
-
-
-
-Desruisseaux Standards Track [Page 130]
-
-RFC 5545 iCalendar September 2009
-
-
- Every 3 hours from 9:00 AM to 5:00 PM on a specific day:
-
- DTSTART;TZID=America/New_York:19970902T090000
- RRULE:FREQ=HOURLY;INTERVAL=3;UNTIL=19970902T170000Z
-
- ==> (September 2, 1997 EDT) 09:00,12:00,15:00
-
- Every 15 minutes for 6 occurrences:
-
- DTSTART;TZID=America/New_York:19970902T090000
- RRULE:FREQ=MINUTELY;INTERVAL=15;COUNT=6
-
- ==> (September 2, 1997 EDT) 09:00,09:15,09:30,09:45,10:00,10:15
-
- Every hour and a half for 4 occurrences:
-
- DTSTART;TZID=America/New_York:19970902T090000
- RRULE:FREQ=MINUTELY;INTERVAL=90;COUNT=4
-
- ==> (September 2, 1997 EDT) 09:00,10:30;12:00;13:30
-
- Every 20 minutes from 9:00 AM to 4:40 PM every day:
-
- DTSTART;TZID=America/New_York:19970902T090000
- RRULE:FREQ=DAILY;BYHOUR=9,10,11,12,13,14,15,16;BYMINUTE=0,20,40
- or
- RRULE:FREQ=MINUTELY;INTERVAL=20;BYHOUR=9,10,11,12,13,14,15,16
-
- ==> (September 2, 1997 EDT) 9:00,9:20,9:40,10:00,10:20,
- ... 16:00,16:20,16:40
- (September 3, 1997 EDT) 9:00,9:20,9:40,10:00,10:20,
- ...16:00,16:20,16:40
- ...
-
- An example where the days generated makes a difference because of
- WKST:
-
- DTSTART;TZID=America/New_York:19970805T090000
- RRULE:FREQ=WEEKLY;INTERVAL=2;COUNT=4;BYDAY=TU,SU;WKST=MO
-
- ==> (1997 EDT) August 5,10,19,24
-
- changing only WKST from MO to SU, yields different results...
-
- DTSTART;TZID=America/New_York:19970805T090000
- RRULE:FREQ=WEEKLY;INTERVAL=2;COUNT=4;BYDAY=TU,SU;WKST=SU
-
- ==> (1997 EDT) August 5,17,19,31
-
-
-
-Desruisseaux Standards Track [Page 131]
-
-RFC 5545 iCalendar September 2009
-
-
- An example where an invalid date (i.e., February 30) is ignored.
-
- DTSTART;TZID=America/New_York:20070115T090000
- RRULE:FREQ=MONTHLY;BYMONTHDAY=15,30;COUNT=5
-
- ==> (2007 EST) January 15,30
- (2007 EST) February 15
- (2007 EDT) March 15,30
-
-3.8.6. Alarm Component Properties
-
- The following properties specify alarm information in calendar
- components.
-
-3.8.6.1. Action
-
- Property Name: ACTION
-
- Purpose: This property defines the action to be invoked when an
- alarm is triggered.
-
- Value Type: TEXT
-
- Property Parameters: IANA and non-standard property parameters can
- be specified on this property.
-
- Conformance: This property MUST be specified once in a "VALARM"
- calendar component.
-
- Description: Each "VALARM" calendar component has a particular type
- of action with which it is associated. This property specifies
- the type of action. Applications MUST ignore alarms with x-name
- and iana-token values they don't recognize.
-
- Format Definition: This property is defined by the following
- notation:
-
- action = "ACTION" actionparam ":" actionvalue CRLF
-
- actionparam = *(";" other-param)
-
-
- actionvalue = "AUDIO" / "DISPLAY" / "EMAIL"
- / iana-token / x-name
-
- Example: The following are examples of this property in a "VALARM"
- calendar component:
-
-
-
-
-Desruisseaux Standards Track [Page 132]
-
-RFC 5545 iCalendar September 2009
-
-
- ACTION:AUDIO
-
- ACTION:DISPLAY
-
-3.8.6.2. Repeat Count
-
- Property Name: REPEAT
-
- Purpose: This property defines the number of times the alarm should
- be repeated, after the initial trigger.
-
- Value Type: INTEGER
-
- Property Parameters: IANA and non-standard property parameters can
- be specified on this property.
-
- Conformance: This property can be specified in a "VALARM" calendar
- component.
-
- Description: This property defines the number of times an alarm
- should be repeated after its initial trigger. If the alarm
- triggers more than once, then this property MUST be specified
- along with the "DURATION" property.
-
- Format Definition: This property is defined by the following
- notation:
-
- repeat = "REPEAT" repparam ":" integer CRLF
- ;Default is "0", zero.
-
- repparam = *(";" other-param)
-
- Example: The following is an example of this property for an alarm
- that repeats 4 additional times with a 5-minute delay after the
- initial triggering of the alarm:
-
- REPEAT:4
- DURATION:PT5M
-
-3.8.6.3. Trigger
-
- Property Name: TRIGGER
-
- Purpose: This property specifies when an alarm will trigger.
-
- Value Type: The default value type is DURATION. The value type can
- be set to a DATE-TIME value type, in which case the value MUST
- specify a UTC-formatted DATE-TIME value.
-
-
-
-Desruisseaux Standards Track [Page 133]
-
-RFC 5545 iCalendar September 2009
-
-
- Property Parameters: IANA, non-standard, value data type, time zone
- identifier, or trigger relationship property parameters can be
- specified on this property. The trigger relationship property
- parameter MUST only be specified when the value type is
- "DURATION".
-
- Conformance: This property MUST be specified in the "VALARM"
- calendar component.
-
- Description: This property defines when an alarm will trigger. The
- default value type is DURATION, specifying a relative time for the
- trigger of the alarm. The default duration is relative to the
- start of an event or to-do with which the alarm is associated.
- The duration can be explicitly set to trigger from either the end
- or the start of the associated event or to-do with the "RELATED"
- parameter. A value of START will set the alarm to trigger off the
- start of the associated event or to-do. A value of END will set
- the alarm to trigger off the end of the associated event or to-do.
-
- Either a positive or negative duration may be specified for the
- "TRIGGER" property. An alarm with a positive duration is
- triggered after the associated start or end of the event or to-do.
- An alarm with a negative duration is triggered before the
- associated start or end of the event or to-do.
-
- The "RELATED" property parameter is not valid if the value type of
- the property is set to DATE-TIME (i.e., for an absolute date and
- time alarm trigger). If a value type of DATE-TIME is specified,
- then the property value MUST be specified in the UTC time format.
- If an absolute trigger is specified on an alarm for a recurring
- event or to-do, then the alarm will only trigger for the specified
- absolute DATE-TIME, along with any specified repeating instances.
-
- If the trigger is set relative to START, then the "DTSTART"
- property MUST be present in the associated "VEVENT" or "VTODO"
- calendar component. If an alarm is specified for an event with
- the trigger set relative to the END, then the "DTEND" property or
- the "DTSTART" and "DURATION " properties MUST be present in the
- associated "VEVENT" calendar component. If the alarm is specified
- for a to-do with a trigger set relative to the END, then either
- the "DUE" property or the "DTSTART" and "DURATION " properties
- MUST be present in the associated "VTODO" calendar component.
-
- Alarms specified in an event or to-do that is defined in terms of
- a DATE value type will be triggered relative to 00:00:00 of the
- user's configured time zone on the specified date, or relative to
- 00:00:00 UTC on the specified date if no configured time zone can
- be found for the user. For example, if "DTSTART" is a DATE value
-
-
-
-Desruisseaux Standards Track [Page 134]
-
-RFC 5545 iCalendar September 2009
-
-
- set to 19980205 then the duration trigger will be relative to
- 19980205T000000 America/New_York for a user configured with the
- America/New_York time zone.
-
- Format Definition: This property is defined by the following
- notation:
-
- trigger = "TRIGGER" (trigrel / trigabs) CRLF
-
- trigrel = *(
- ;
- ; The following are OPTIONAL,
- ; but MUST NOT occur more than once.
- ;
- (";" "VALUE" "=" "DURATION") /
- (";" trigrelparam) /
- ;
- ; The following is OPTIONAL,
- ; and MAY occur more than once.
- ;
- (";" other-param)
- ;
- ) ":" dur-value
-
- trigabs = *(
- ;
- ; The following is REQUIRED,
- ; but MUST NOT occur more than once.
- ;
- (";" "VALUE" "=" "DATE-TIME") /
- ;
- ; The following is OPTIONAL,
- ; and MAY occur more than once.
- ;
- (";" other-param)
- ;
- ) ":" date-time
-
- Example: A trigger set 15 minutes prior to the start of the event or
- to-do.
-
- TRIGGER:-PT15M
-
- A trigger set five minutes after the end of an event or the due
- date of a to-do.
-
- TRIGGER;RELATED=END:PT5M
-
-
-
-
-Desruisseaux Standards Track [Page 135]
-
-RFC 5545 iCalendar September 2009
-
-
- A trigger set to an absolute DATE-TIME.
-
- TRIGGER;VALUE=DATE-TIME:19980101T050000Z
-
-3.8.7. Change Management Component Properties
-
- The following properties specify change management information in
- calendar components.
-
-3.8.7.1. Date-Time Created
-
- Property Name: CREATED
-
- Purpose: This property specifies the date and time that the calendar
- information was created by the calendar user agent in the calendar
- store.
-
- Note: This is analogous to the creation date and time for a
- file in the file system.
-
- Value Type: DATE-TIME
-
- Property Parameters: IANA and non-standard property parameters can
- be specified on this property.
-
- Conformance: The property can be specified once in "VEVENT",
- "VTODO", or "VJOURNAL" calendar components. The value MUST be
- specified as a date with UTC time.
-
- Description: This property specifies the date and time that the
- calendar information was created by the calendar user agent in the
- calendar store.
-
- Format Definition: This property is defined by the following
- notation:
-
- created = "CREATED" creaparam ":" date-time CRLF
-
- creaparam = *(";" other-param)
-
- Example: The following is an example of this property:
-
- CREATED:19960329T133000Z
-
-
-
-
-
-
-
-
-Desruisseaux Standards Track [Page 136]
-
-RFC 5545 iCalendar September 2009
-
-
-3.8.7.2. Date-Time Stamp
-
- Property Name: DTSTAMP
-
- Purpose: In the case of an iCalendar object that specifies a
- "METHOD" property, this property specifies the date and time that
- the instance of the iCalendar object was created. In the case of
- an iCalendar object that doesn't specify a "METHOD" property, this
- property specifies the date and time that the information
- associated with the calendar component was last revised in the
- calendar store.
-
- Value Type: DATE-TIME
-
- Property Parameters: IANA and non-standard property parameters can
- be specified on this property.
-
- Conformance: This property MUST be included in the "VEVENT",
- "VTODO", "VJOURNAL", or "VFREEBUSY" calendar components.
-
- Description: The value MUST be specified in the UTC time format.
-
- This property is also useful to protocols such as [2447bis] that
- have inherent latency issues with the delivery of content. This
- property will assist in the proper sequencing of messages
- containing iCalendar objects.
-
- In the case of an iCalendar object that specifies a "METHOD"
- property, this property differs from the "CREATED" and "LAST-
- MODIFIED" properties. These two properties are used to specify
- when the particular calendar data in the calendar store was
- created and last modified. This is different than when the
- iCalendar object representation of the calendar service
- information was created or last modified.
-
- In the case of an iCalendar object that doesn't specify a "METHOD"
- property, this property is equivalent to the "LAST-MODIFIED"
- property.
-
- Format Definition: This property is defined by the following
- notation:
-
- dtstamp = "DTSTAMP" stmparam ":" date-time CRLF
-
- stmparam = *(";" other-param)
-
-
-
-
-
-
-Desruisseaux Standards Track [Page 137]
-
-RFC 5545 iCalendar September 2009
-
-
- Example:
-
- DTSTAMP:19971210T080000Z
-
-3.8.7.3. Last Modified
-
- Property Name: LAST-MODIFIED
-
- Purpose: This property specifies the date and time that the
- information associated with the calendar component was last
- revised in the calendar store.
-
- Note: This is analogous to the modification date and time for a
- file in the file system.
-
- Value Type: DATE-TIME
-
- Property Parameters: IANA and non-standard property parameters can
- be specified on this property.
-
- Conformance: This property can be specified in the "VEVENT",
- "VTODO", "VJOURNAL", or "VTIMEZONE" calendar components.
-
- Description: The property value MUST be specified in the UTC time
- format.
-
- Format Definition: This property is defined by the following
- notation:
-
- last-mod = "LAST-MODIFIED" lstparam ":" date-time CRLF
-
- lstparam = *(";" other-param)
-
- Example: The following is an example of this property:
-
- LAST-MODIFIED:19960817T133000Z
-
-3.8.7.4. Sequence Number
-
- Property Name: SEQUENCE
-
- Purpose: This property defines the revision sequence number of the
- calendar component within a sequence of revisions.
-
- Value Type: INTEGER
-
- Property Parameters: IANA and non-standard property parameters can
- be specified on this property.
-
-
-
-Desruisseaux Standards Track [Page 138]
-
-RFC 5545 iCalendar September 2009
-
-
- Conformance: The property can be specified in "VEVENT", "VTODO", or
- "VJOURNAL" calendar component.
-
- Description: When a calendar component is created, its sequence
- number is 0. It is monotonically incremented by the "Organizer's"
- CUA each time the "Organizer" makes a significant revision to the
- calendar component.
-
- The "Organizer" includes this property in an iCalendar object that
- it sends to an "Attendee" to specify the current version of the
- calendar component.
-
- The "Attendee" includes this property in an iCalendar object that
- it sends to the "Organizer" to specify the version of the calendar
- component to which the "Attendee" is referring.
-
- A change to the sequence number is not the mechanism that an
- "Organizer" uses to request a response from the "Attendees". The
- "RSVP" parameter on the "ATTENDEE" property is used by the
- "Organizer" to indicate that a response from the "Attendees" is
- requested.
-
- Recurrence instances of a recurring component MAY have different
- sequence numbers.
-
- Format Definition: This property is defined by the following
- notation:
-
- seq = "SEQUENCE" seqparam ":" integer CRLF
- ; Default is "0"
-
- seqparam = *(";" other-param)
-
- Example: The following is an example of this property for a calendar
- component that was just created by the "Organizer":
-
- SEQUENCE:0
-
- The following is an example of this property for a calendar
- component that has been revised two different times by the
- "Organizer":
-
- SEQUENCE:2
-
-3.8.8. Miscellaneous Component Properties
-
- The following properties specify information about a number of
- miscellaneous features of calendar components.
-
-
-
-Desruisseaux Standards Track [Page 139]
-
-RFC 5545 iCalendar September 2009
-
-
-3.8.8.1. IANA Properties
-
- Property Name: An IANA-registered property name
-
- Value Type: The default value type is TEXT. The value type can be
- set to any value type.
-
- Property Parameters: Any parameter can be specified on this
- property.
-
- Description: This specification allows other properties registered
- with IANA to be specified in any calendar components. Compliant
- applications are expected to be able to parse these other IANA-
- registered properties but can ignore them.
-
- Format Definition: This property is defined by the following
- notation:
-
- iana-prop = iana-token *(";" icalparameter) ":" value CRLF
-
- Example: The following are examples of properties that might be
- registered to IANA:
-
- DRESSCODE:CASUAL
-
- NON-SMOKING;VALUE=BOOLEAN:TRUE
-
-3.8.8.2. Non-Standard Properties
-
- Property Name: Any property name with a "X-" prefix
-
- Purpose: This class of property provides a framework for defining
- non-standard properties.
-
- Value Type: The default value type is TEXT. The value type can be
- set to any value type.
-
- Property Parameters: IANA, non-standard, and language property
- parameters can be specified on this property.
-
- Conformance: This property can be specified in any calendar
- component.
-
- Description: The MIME Calendaring and Scheduling Content Type
- provides a "standard mechanism for doing non-standard things".
- This extension support is provided for implementers to "push the
- envelope" on the existing version of the memo. Extension
- properties are specified by property and/or property parameter
-
-
-
-Desruisseaux Standards Track [Page 140]
-
-RFC 5545 iCalendar September 2009
-
-
- names that have the prefix text of "X-" (the two-character
- sequence: LATIN CAPITAL LETTER X character followed by the HYPHEN-
- MINUS character). It is recommended that vendors concatenate onto
- this sentinel another short prefix text to identify the vendor.
- This will facilitate readability of the extensions and minimize
- possible collision of names between different vendors. User
- agents that support this content type are expected to be able to
- parse the extension properties and property parameters but can
- ignore them.
-
- At present, there is no registration authority for names of
- extension properties and property parameters. The value type for
- this property is TEXT. Optionally, the value type can be any of
- the other valid value types.
-
- Format Definition: This property is defined by the following
- notation:
-
- x-prop = x-name *(";" icalparameter) ":" value CRLF
-
- Example: The following might be the ABC vendor's extension for an
- audio-clip form of subject property:
-
- X-ABC-MMSUBJ;VALUE=URI;FMTTYPE=audio/basic:http://www.example.
- org/mysubj.au
-
-3.8.8.3. Request Status
-
- Property Name: REQUEST-STATUS
-
- Purpose: This property defines the status code returned for a
- scheduling request.
-
- Value Type: TEXT
-
- Property Parameters: IANA, non-standard, and language property
- parameters can be specified on this property.
-
- Conformance: The property can be specified in the "VEVENT", "VTODO",
- "VJOURNAL", or "VFREEBUSY" calendar component.
-
- Description: This property is used to return status code information
- related to the processing of an associated iCalendar object. The
- value type for this property is TEXT.
-
-
-
-
-
-
-
-Desruisseaux Standards Track [Page 141]
-
-RFC 5545 iCalendar September 2009
-
-
- The value consists of a short return status component, a longer
- return status description component, and optionally a status-
- specific data component. The components of the value are
- separated by the SEMICOLON character.
-
- The short return status is a PERIOD character separated pair or
- 3-tuple of integers. For example, "3.1" or "3.1.1". The
- successive levels of integers provide for a successive level of
- status code granularity.
-
- The following are initial classes for the return status code.
- Individual iCalendar object methods will define specific return
- status codes for these classes. In addition, other classes for
- the return status code may be defined using the registration
- process defined later in this memo.
-
- +--------+----------------------------------------------------------+
- | Short | Longer Return Status Description |
- | Return | |
- | Status | |
- | Code | |
- +--------+----------------------------------------------------------+
- | 1.xx | Preliminary success. This class of status code |
- | | indicates that the request has been initially processed |
- | | but that completion is pending. |
- | | |
- | 2.xx | Successful. This class of status code indicates that |
- | | the request was completed successfully. However, the |
- | | exact status code can indicate that a fallback has been |
- | | taken. |
- | | |
- | 3.xx | Client Error. This class of status code indicates that |
- | | the request was not successful. The error is the result |
- | | of either a syntax or a semantic error in the client- |
- | | formatted request. Request should not be retried until |
- | | the condition in the request is corrected. |
- | | |
- | 4.xx | Scheduling Error. This class of status code indicates |
- | | that the request was not successful. Some sort of error |
- | | occurred within the calendaring and scheduling service, |
- | | not directly related to the request itself. |
- +--------+----------------------------------------------------------+
-
-
-
-
-
-
-
-
-
-Desruisseaux Standards Track [Page 142]
-
-RFC 5545 iCalendar September 2009
-
-
- Format Definition: This property is defined by the following
- notation:
-
- rstatus = "REQUEST-STATUS" rstatparam ":"
- statcode ";" statdesc [";" extdata]
-
- rstatparam = *(
- ;
- ; The following is OPTIONAL,
- ; but MUST NOT occur more than once.
- ;
- (";" languageparam) /
- ;
- ; The following is OPTIONAL,
- ; and MAY occur more than once.
- ;
- (";" other-param)
- ;
- )
-
- statcode = 1*DIGIT 1*2("." 1*DIGIT)
- ;Hierarchical, numeric return status code
-
- statdesc = text
- ;Textual status description
-
- extdata = text
- ;Textual exception data. For example, the offending property
- ;name and value or complete property line.
-
- Example: The following are some possible examples of this property.
-
- The COMMA and SEMICOLON separator characters in the property value
- are BACKSLASH character escaped because they appear in a text
- value.
-
- REQUEST-STATUS:2.0;Success
-
- REQUEST-STATUS:3.1;Invalid property value;DTSTART:96-Apr-01
-
- REQUEST-STATUS:2.8; Success\, repeating event ignored. Scheduled
- as a single event.;RRULE:FREQ=WEEKLY\;INTERVAL=2
-
- REQUEST-STATUS:4.1;Event conflict. Date-time is busy.
-
- REQUEST-STATUS:3.7;Invalid calendar user;ATTENDEE:
- mailto:jsmith@example.com
-
-
-
-
-Desruisseaux Standards Track [Page 143]
-
-RFC 5545 iCalendar September 2009
-
-
-4. iCalendar Object Examples
-
- The following examples are provided as an informational source of
- illustrative iCalendar objects consistent with this content type.
-
- The following example specifies a three-day conference that begins at
- 2:30 P.M. UTC, September 18, 1996 and ends at 10:00 P.M. UTC,
- September 20, 1996.
-
- BEGIN:VCALENDAR
- PRODID:-//xyz Corp//NONSGML PDA Calendar Version 1.0//EN
- VERSION:2.0
- BEGIN:VEVENT
- DTSTAMP:19960704T120000Z
- UID:uid1@example.com
- ORGANIZER:mailto:jsmith@example.com
- DTSTART:19960918T143000Z
- DTEND:19960920T220000Z
- STATUS:CONFIRMED
- CATEGORIES:CONFERENCE
- SUMMARY:Networld+Interop Conference
- DESCRIPTION:Networld+Interop Conference
- and Exhibit\nAtlanta World Congress Center\n
- Atlanta\, Georgia
- END:VEVENT
- END:VCALENDAR
-
- The following example specifies a group-scheduled meeting that begins
- at 8:30 AM EST on March 12, 1998 and ends at 9:30 AM EST on March 12,
- 1998. The "Organizer" has scheduled the meeting with one or more
- calendar users in a group. A time zone specification for Eastern
- United States has been specified.
-
- BEGIN:VCALENDAR
- PRODID:-//RDU Software//NONSGML HandCal//EN
- VERSION:2.0
- BEGIN:VTIMEZONE
- TZID:America/New_York
- BEGIN:STANDARD
- DTSTART:19981025T020000
- TZOFFSETFROM:-0400
- TZOFFSETTO:-0500
- TZNAME:EST
- END:STANDARD
- BEGIN:DAYLIGHT
- DTSTART:19990404T020000
- TZOFFSETFROM:-0500
- TZOFFSETTO:-0400
-
-
-
-Desruisseaux Standards Track [Page 144]
-
-RFC 5545 iCalendar September 2009
-
-
- TZNAME:EDT
- END:DAYLIGHT
- END:VTIMEZONE
- BEGIN:VEVENT
- DTSTAMP:19980309T231000Z
- UID:guid-1.example.com
- ORGANIZER:mailto:mrbig@example.com
- ATTENDEE;RSVP=TRUE;ROLE=REQ-PARTICIPANT;CUTYPE=GROUP:
- mailto:employee-A@example.com
- DESCRIPTION:Project XYZ Review Meeting
- CATEGORIES:MEETING
- CLASS:PUBLIC
- CREATED:19980309T130000Z
- SUMMARY:XYZ Project Review
- DTSTART;TZID=America/New_York:19980312T083000
- DTEND;TZID=America/New_York:19980312T093000
- LOCATION:1CP Conference Room 4350
- END:VEVENT
- END:VCALENDAR
-
- The following is an example of an iCalendar object passed in a MIME
- message with a single body part consisting of a "text/calendar"
- Content Type.
-
- TO:jsmith@example.com
- FROM:jdoe@example.com
- MIME-VERSION:1.0
- MESSAGE-ID:
- CONTENT-TYPE:text/calendar; method="xyz"; component="VEVENT"
-
- BEGIN:VCALENDAR
- METHOD:xyz
- VERSION:2.0
- PRODID:-//ABC Corporation//NONSGML My Product//EN
- BEGIN:VEVENT
- DTSTAMP:19970324T120000Z
- SEQUENCE:0
- UID:uid3@example.com
- ORGANIZER:mailto:jdoe@example.com
- ATTENDEE;RSVP=TRUE:mailto:jsmith@example.com
- DTSTART:19970324T123000Z
- DTEND:19970324T210000Z
- CATEGORIES:MEETING,PROJECT
- CLASS:PUBLIC
- SUMMARY:Calendaring Interoperability Planning Meeting
- DESCRIPTION:Discuss how we can test c&s interoperability\n
- using iCalendar and other IETF standards.
- LOCATION:LDB Lobby
-
-
-
-Desruisseaux Standards Track [Page 145]
-
-RFC 5545 iCalendar September 2009
-
-
- ATTACH;FMTTYPE=application/postscript:ftp://example.com/pub/
- conf/bkgrnd.ps
- END:VEVENT
- END:VCALENDAR
-
- The following is an example of a to-do due on April 15, 1998. An
- audio alarm has been specified to remind the calendar user at noon,
- the day before the to-do is expected to be completed and repeat
- hourly, four additional times. The to-do definition has been
- modified twice since it was initially created.
-
- BEGIN:VCALENDAR
- VERSION:2.0
- PRODID:-//ABC Corporation//NONSGML My Product//EN
- BEGIN:VTODO
- DTSTAMP:19980130T134500Z
- SEQUENCE:2
- UID:uid4@example.com
- ORGANIZER:mailto:unclesam@example.com
- ATTENDEE;PARTSTAT=ACCEPTED:mailto:jqpublic@example.com
- DUE:19980415T000000
- STATUS:NEEDS-ACTION
- SUMMARY:Submit Income Taxes
- BEGIN:VALARM
- ACTION:AUDIO
- TRIGGER:19980403T120000Z
- ATTACH;FMTTYPE=audio/basic:http://example.com/pub/audio-
- files/ssbanner.aud
- REPEAT:4
- DURATION:PT1H
- END:VALARM
- END:VTODO
- END:VCALENDAR
-
- The following is an example of a journal entry:
-
- BEGIN:VCALENDAR
- VERSION:2.0
- PRODID:-//ABC Corporation//NONSGML My Product//EN
- BEGIN:VJOURNAL
- DTSTAMP:19970324T120000Z
- UID:uid5@example.com
- ORGANIZER:mailto:jsmith@example.com
- STATUS:DRAFT
- CLASS:PUBLIC
- CATEGORIES:Project Report,XYZ,Weekly Meeting
- DESCRIPTION:Project xyz Review Meeting Minutes\n
- Agenda\n1. Review of project version 1.0 requirements.\n2.
-
-
-
-Desruisseaux Standards Track [Page 146]
-
-RFC 5545 iCalendar September 2009
-
-
- Definition
- of project processes.\n3. Review of project schedule.\n
- Participants: John Smith\, Jane Doe\, Jim Dandy\n-It was
- decided that the requirements need to be signed off by
- product marketing.\n-Project processes were accepted.\n
- -Project schedule needs to account for scheduled holidays
- and employee vacation time. Check with HR for specific
- dates.\n-New schedule will be distributed by Friday.\n-
- Next weeks meeting is cancelled. No meeting until 3/23.
- END:VJOURNAL
- END:VCALENDAR
-
- The following is an example of published busy time information. The
- iCalendar object might be placed in the network resource
- http://www.example.com/calendar/busytime/jsmith.ifb.
-
- BEGIN:VCALENDAR
- VERSION:2.0
- PRODID:-//RDU Software//NONSGML HandCal//EN
- BEGIN:VFREEBUSY
- ORGANIZER:mailto:jsmith@example.com
- DTSTART:19980313T141711Z
- DTEND:19980410T141711Z
- FREEBUSY:19980314T233000Z/19980315T003000Z
- FREEBUSY:19980316T153000Z/19980316T163000Z
- FREEBUSY:19980318T030000Z/19980318T040000Z
- URL:http://www.example.com/calendar/busytime/jsmith.ifb
- END:VFREEBUSY
- END:VCALENDAR
-
-5. Recommended Practices
-
- These recommended practices should be followed in order to assure
- consistent handling of the following cases for an iCalendar object.
-
- 1. Content lines longer than 75 octets SHOULD be folded.
-
- 2. When the combination of the "RRULE" and "RDATE" properties in a
- recurring component produces multiple instances having the same
- start DATE-TIME value, they should be collapsed to, and
- considered as, a single instance. If the "RDATE" property is
- specified as a PERIOD value the duration of the recurrence
- instance will be the one specified by the "RDATE" property, and
- not the duration of the recurrence instance defined by the
- "DTSTART" property.
-
- 3. When a calendar user receives multiple requests for the same
- calendar component (e.g., REQUEST for a "VEVENT" calendar
-
-
-
-Desruisseaux Standards Track [Page 147]
-
-RFC 5545 iCalendar September 2009
-
-
- component) as a result of being on multiple mailing lists
- specified by "ATTENDEE" properties in the request, they SHOULD
- respond to only one of the requests. The calendar user SHOULD
- also specify (using the "MEMBER" parameter of the "ATTENDEE"
- property) of which mailing list they are a member.
-
- 4. An implementation can truncate a "SUMMARY" property value to 255
- octets, but it MUST NOT truncate the value in the middle of a
- UTF-8 multi-octet sequence.
-
- 5. If seconds of the minute are not supported by an implementation,
- then a value of "00" SHOULD be specified for the seconds
- component in a time value.
-
- 6. "TZURL" values SHOULD NOT be specified as a file URI type. This
- URI form can be useful within an organization, but is problematic
- in the Internet.
-
- 7. Some possible English values for "CATEGORIES" property include:
- "ANNIVERSARY", "APPOINTMENT", "BUSINESS", "EDUCATION", "HOLIDAY",
- "MEETING", "MISCELLANEOUS", "NON-WORKING HOURS", "NOT IN OFFICE",
- "PERSONAL", "PHONE CALL", "SICK DAY", "SPECIAL OCCASION",
- "TRAVEL", "VACATION". Categories can be specified in any
- registered language.
-
- 8. Some possible English values for the "RESOURCES" property
- include: "CATERING", "CHAIRS", "COMPUTER PROJECTOR", "EASEL",
- "OVERHEAD PROJECTOR", "SPEAKER PHONE", "TABLE", "TV", "VCR",
- "VIDEO PHONE", "VEHICLE". Resources can be specified in any
- registered language.
-
-6. Internationalization Considerations
-
- Applications MUST generate iCalendar streams in the UTF-8 charset and
- MUST accept an iCalendar stream in the UTF-8 or US-ASCII charset.
-
-7. Security Considerations
-
- Because calendaring and scheduling information is very privacy-
- sensitive, the protocol used for the transmission of calendaring and
- scheduling information should have capabilities to protect the
- information from possible threats, such as eavesdropping, replay,
- message insertion, deletion, modification, and man-in-the-middle
- attacks.
-
- As this document only defines the data format and media type of text/
- calendar that is independent of any calendar service or protocol, it
- is up to the actual protocol specifications such as iTIP [2446bis],
-
-
-
-Desruisseaux Standards Track [Page 148]
-
-RFC 5545 iCalendar September 2009
-
-
- iMIP [2447bis], and "Calendaring Extensions to WebDAV (CalDAV)"
- [RFC4791] to describe the threats that the above attacks present, as
- well as ways in which to mitigate them.
-
-8. IANA Considerations
-
-8.1. iCalendar Media Type Registration
-
- The Calendaring and Scheduling Core Object Specification is intended
- for use as a MIME content type.
-
- To: ietf-types@iana.org
-
- Subject: Registration of media type text/calendar
-
- Type name: text
-
- Subtype name: calendar
-
- Required parameters: none
-
- Optional parameters: charset, method, component, and optinfo
-
- The "charset" parameter is defined in [RFC2046] for subtypes of
- the "text" media type. It is used to indicate the charset used in
- the body part. The charset supported by this revision of
- iCalendar is UTF-8. The use of any other charset is deprecated by
- this revision of iCalendar; however, note that this revision
- requires that compliant applications MUST accept iCalendar streams
- using either the UTF-8 or US-ASCII charset.
-
- The "method" parameter is used to convey the iCalendar object
- method or transaction semantics for the calendaring and scheduling
- information. It also is an identifier for the restricted set of
- properties and values of which the iCalendar object consists. The
- parameter is to be used as a guide for applications interpreting
- the information contained within the body part. It SHOULD NOT be
- used to exclude or require particular pieces of information unless
- the identified method definition specifically calls for this
- behavior. Unless specifically forbidden by a particular method
- definition, a text/calendar content type can contain any set of
- properties permitted by the Calendaring and Scheduling Core Object
- Specification. The "method" parameter MUST be specified and MUST
- be set to the same value as the "METHOD" component property of the
- iCalendar objects of the iCalendar stream if and only if the
- iCalendar objects in the iCalendar stream all have a "METHOD"
- component property set to the same value.
-
-
-
-
-Desruisseaux Standards Track [Page 149]
-
-RFC 5545 iCalendar September 2009
-
-
- The value for the "method" parameter is defined as follows:
-
- method = 1*(ALPHA / DIGIT / "-")
- ; IANA-registered iCalendar object method
-
- The "component" parameter conveys the type of iCalendar calendar
- component within the body part. If the iCalendar object contains
- more than one calendar component type, then multiple component
- parameters MUST be specified.
-
- The value for the "component" parameter is defined as follows:
-
- component = "VEVENT"
- / "VTODO"
- / "VJOURNAL"
- / "VFREEBUSY"
- / "VTIMEZONE"
- / iana-token
- / x-name
-
- The "optinfo" parameter conveys optional information about the
- iCalendar object within the body part. This parameter can only
- specify semantics already specified by the iCalendar object and
- that can be otherwise determined by parsing the body part. In
- addition, the optional information specified by this parameter
- MUST be consistent with that information specified by the
- iCalendar object. For example, it can be used to convey the
- "Attendee" response status to a meeting request. The parameter
- value consists of a string value.
-
- The parameter can be specified multiple times.
-
- The value for the "optinfo" parameter is defined as follows:
-
- optinfo = infovalue / qinfovalue
-
- infovalue = iana-token / x-name
-
- qinfovalue = DQUOTE (infovalue) DQUOTE
-
- Encoding considerations: This media type can contain 8bit
- characters, so the use of quoted-printable or base64 MIME Content-
- Transfer-Encodings might be necessary when iCalendar objects are
- transferred across protocols restricted to the 7bit repertoire.
- Note that a text valued property in the content entity can also
- have content encoding of special characters using a BACKSLASH
- character escapement technique. This means that content values
- can end up being encoded twice.
-
-
-
-Desruisseaux Standards Track [Page 150]
-
-RFC 5545 iCalendar September 2009
-
-
- Security considerations: See Section 7.
-
- Interoperability considerations: This media type is intended to
- define a common format for conveying calendaring and scheduling
- information between different systems. It is heavily based on the
- earlier [VCAL] industry specification.
-
- Published specification: This specification.
-
- Applications that use this media type: This media type is designed
- for widespread use by Internet calendaring and scheduling
- applications. In addition, applications in the workflow and
- document management area might find this content-type applicable.
- The iTIP [2446bis], iMIP [2447bis], and CalDAV [RFC4791] Internet
- protocols directly use this media type also.
-
- Additional information:
-
- Magic number(s): None.
-
- File extension(s): The file extension of "ics" is to be used to
- designate a file containing (an arbitrary set of) calendaring
- and scheduling information consistent with this MIME content
- type.
-
- The file extension of "ifb" is to be used to designate a file
- containing free or busy time information consistent with this
- MIME content type.
-
- Macintosh file type code(s): The file type code of "iCal" is to
- be used in Apple MacIntosh operating system environments to
- designate a file containing calendaring and scheduling
- information consistent with this MIME media type.
-
- The file type code of "iFBf" is to be used in Apple MacIntosh
- operating system environments to designate a file containing
- free or busy time information consistent with this MIME media
- type.
-
- Person & email address to contact for further information: See the
- "Author's Address" section of this document.
-
- Intended usage: COMMON
-
- Restrictions on usage: There are no restrictions on where this media
- type can be used.
-
- Author: See the "Author's Address" section of this document.
-
-
-
-Desruisseaux Standards Track [Page 151]
-
-RFC 5545 iCalendar September 2009
-
-
- Change controller: IETF
-
-8.2. New iCalendar Elements Registration
-
- This section defines the process to register new or modified
- iCalendar elements, that is, components, properties, parameters,
- value data types, and values, with IANA.
-
-8.2.1. iCalendar Elements Registration Procedure
-
- The IETF will create a mailing list, icalendar@ietf.org, which can be
- used for public discussion of iCalendar elements proposals prior to
- registration. Use of the mailing list is strongly encouraged. The
- IESG will appoint a designated expert who will monitor the
- icalendar@ietf.org mailing list and review registrations.
-
- Registration of new iCalendar elements MUST be reviewed by the
- designated expert and published in an RFC. A Standards Track RFC is
- REQUIRED for the registration of new value data types that modify
- existing properties, as well as for the registration of participation
- status values to be used in "VEVENT" calendar components. A
- Standards Track RFC is also REQUIRED for registration of iCalendar
- elements that modify iCalendar elements previously documented in a
- Standards Track RFC.
-
- The registration procedure begins when a completed registration
- template, defined in the sections below, is sent to
- icalendar@ietf.org and iana@iana.org. The designated expert is
- expected to tell IANA and the submitter of the registration within
- two weeks whether the registration is approved, approved with minor
- changes, or rejected with cause. When a registration is rejected
- with cause, it can be re-submitted if the concerns listed in the
- cause are addressed. Decisions made by the designated expert can be
- appealed to the IESG Applications Area Director, then to the IESG.
- They follow the normal appeals procedure for IESG decisions.
-
-8.2.2. Registration Template for Components
-
- A component is defined by completing the following template.
-
- Component name: The name of the component.
-
- Purpose: The purpose of the component. Give a short but clear
- description.
-
- Format definition: The ABNF for the component definition needs to be
- specified.
-
-
-
-
-Desruisseaux Standards Track [Page 152]
-
-RFC 5545 iCalendar September 2009
-
-
- Description: Any special notes about the component, how it is to be
- used, etc.
-
- Example(s): One or more examples of instances of the component need
- to be specified.
-
-8.2.3. Registration Template for Properties
-
- A property is defined by completing the following template.
-
- Property name: The name of the property.
-
- Purpose: The purpose of the property. Give a short but clear
- description.
-
- Value type: Any of the valid value types for the property value need
- to be specified. The default value type also needs to be
- specified.
-
- Property parameters: Any of the valid property parameters for the
- property MUST be specified.
-
- Conformance: The calendar components in which the property can
- appear MUST be specified.
-
- Description: Any special notes about the property, how it is to be
- used, etc.
-
- Format definition: The ABNF for the property definition needs to be
- specified.
-
- Example(s): One or more examples of instances of the property need
- to be specified.
-
-8.2.4. Registration Template for Parameters
-
- A parameter is defined by completing the following template.
-
- Parameter name: The name of the parameter.
-
- Purpose: The purpose of the parameter. Give a short but clear
- description.
-
- Format definition: The ABNF for the parameter definition needs to be
- specified.
-
- Description: Any special notes about the parameter, how it is to be
- used, etc.
-
-
-
-Desruisseaux Standards Track [Page 153]
-
-RFC 5545 iCalendar September 2009
-
-
- Example(s): One or more examples of instances of the parameter need
- to be specified.
-
-8.2.5. Registration Template for Value Data Types
-
- A value data type is defined by completing the following template.
-
- Value name: The name of the value type.
-
- Purpose: The purpose of the value type. Give a short but clear
- description.
-
- Format definition: The ABNF for the value type definition needs to
- be specified.
-
- Description: Any special notes about the value type, how it is to be
- used, etc.
-
- Example(s): One or more examples of instances of the value type need
- to be specified.
-
-8.2.6. Registration Template for Values
-
- A value is defined by completing the following template.
-
- Value: The value literal.
-
- Purpose: The purpose of the value. Give a short but clear
- description.
-
- Conformance: The calendar properties and/or parameters that can take
- this value need to be specified.
-
- Example(s): One or more examples of instances of the value need to
- be specified.
-
- The following is a fictitious example of a registration of an
- iCalendar value:
-
- Value: TOP-SECRET
-
- Purpose: This value is used to specify the access classification of
- top-secret calendar components.
-
- Conformance: This value can be used with the "CLASS" property.
-
-
-
-
-
-
-Desruisseaux Standards Track [Page 154]
-
-RFC 5545 iCalendar September 2009
-
-
- Example(s): The following is an example of this value used with the
- "CLASS" property:
-
- CLASS:TOP-SECRET
-
-8.3. Initial iCalendar Elements Registries
-
- The IANA created and maintains the following registries for iCalendar
- elements with pointers to appropriate reference documents.
-
-8.3.1. Components Registry
-
- The following table has been used to initialize the components
- registry.
-
- +-----------+---------+-------------------------+
- | Component | Status | Reference |
- +-----------+---------+-------------------------+
- | VCALENDAR | Current | RFC 5545, Section 3.4 |
- | | | |
- | VEVENT | Current | RFC 5545, Section 3.6.1 |
- | | | |
- | VTODO | Current | RFC 5545, Section 3.6.2 |
- | | | |
- | VJOURNAL | Current | RFC 5545, Section 3.6.3 |
- | | | |
- | VFREEBUSY | Current | RFC 5545, Section 3.6.4 |
- | | | |
- | VTIMEZONE | Current | RFC 5545, Section 3.6.5 |
- | | | |
- | VALARM | Current | RFC 5545, Section 3.6.6 |
- | | | |
- | STANDARD | Current | RFC 5545, Section 3.6.5 |
- | | | |
- | DAYLIGHT | Current | RFC 5545, Section 3.6.5 |
- +-----------+---------+-------------------------+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Desruisseaux Standards Track [Page 155]
-
-RFC 5545 iCalendar September 2009
-
-
-8.3.2. Properties Registry
-
- The following table is has been used to initialize the properties
- registry.
-
- +------------------+------------+----------------------------+
- | Property | Status | Reference |
- +------------------+------------+----------------------------+
- | CALSCALE | Current | RFC 5545, Section 3.7.1 |
- | METHOD | Current | RFC 5545, Section 3.7.2 |
- | | | |
- | PRODID | Current | RFC 5545, Section 3.7.3 |
- | | | |
- | VERSION | Current | RFC 5545, Section 3.7.4 |
- | | | |
- | ATTACH | Current | RFC 5545, Section 3.8.1.1 |
- | | | |
- | CATEGORIES | Current | RFC 5545, Section 3.8.1.2 |
- | | | |
- | CLASS | Current | RFC 5545, Section 3.8.1.3 |
- | | | |
- | COMMENT | Current | RFC 5545, Section 3.8.1.4 |
- | | | |
- | DESCRIPTION | Current | RFC 5545, Section 3.8.1.5 |
- | | | |
- | GEO | Current | RFC 5545, Section 3.8.1.6 |
- | | | |
- | LOCATION | Current | RFC 5545, Section 3.8.1.7 |
- | | | |
- | PERCENT-COMPLETE | Current | RFC 5545, Section 3.8.1.8 |
- | | | |
- | PRIORITY | Current | RFC 5545, Section 3.8.1.9 |
- | | | |
- | RESOURCES | Current | RFC 5545, Section 3.8.1.10 |
- | | | |
- | STATUS | Current | RFC 5545, Section 3.8.1.11 |
- | | | |
- | SUMMARY | Current | RFC 5545, Section 3.8.1.12 |
- | | | |
- | COMPLETED | Current | RFC 5545, Section 3.8.2.1 |
- | | | |
- | DTEND | Current | RFC 5545, Section 3.8.2.2 |
- | | | |
- | DUE | Current | RFC 5545, Section 3.8.2.3 |
- | | | |
- | DTSTART | Current | RFC 5545, Section 3.8.2.4 |
- | | | |
- | DURATION | Current | RFC 5545, Section 3.8.2.5 |
-
-
-
-Desruisseaux Standards Track [Page 156]
-
-RFC 5545 iCalendar September 2009
-
-
- | | | |
- | FREEBUSY | Current | RFC 5545, Section 3.8.2.6 |
- | | | |
- | TRANSP | Current | RFC 5545, Section 3.8.2.7 |
- | | | |
- | TZID | Current | RFC 5545, Section 3.8.3.1 |
- | | | |
- | TZNAME | Current | RFC 5545, Section 3.8.3.2 |
- | | | |
- | TZOFFSETFROM | Current | RFC 5545, Section 3.8.3.3 |
- | | | |
- | TZOFFSETTO | Current | RFC 5545, Section 3.8.3.4 |
- | | | |
- | TZURL | Current | RFC 5545, Section 3.8.3.5 |
- | | | |
- | ATTENDEE | Current | RFC 5545, Section 3.8.4.1 |
- | | | |
- | CONTACT | Current | RFC 5545, Section 3.8.4.2 |
- | | | |
- | ORGANIZER | Current | RFC 5545, Section 3.8.4.3 |
- | | | |
- | RECURRENCE-ID | Current | RFC 5545, Section 3.8.4.4 |
- | | | |
- | RELATED-TO | Current | RFC 5545, Section 3.8.4.5 |
- | | | |
- | URL | Current | RFC 5545, Section 3.8.4.6 |
- | | | |
- | UID | Current | RFC 5545, Section 3.8.4.7 |
- | | | |
- | EXDATE | Current | RFC 5545, Section 3.8.5.1 |
- | | | |
- | EXRULE | Deprecated | [RFC2445], Section 4.8.5.2 |
- | | | |
- | RDATE | Current | RFC 5545, Section 3.8.5.2 |
- | | | |
- | RRULE | Current | RFC 5545, Section 3.8.5.3 |
- | | | |
- | ACTION | Current | RFC 5545, Section 3.8.6.1 |
- | | | |
- | REPEAT | Current | RFC 5545, Section 3.8.6.2 |
- | | | |
- | TRIGGER | Current | RFC 5545, Section 3.8.6.3 |
- | | | |
- | CREATED | Current | RFC 5545, Section 3.8.7.1 |
- | | | |
- | DTSTAMP | Current | RFC 5545, Section 3.8.7.2 |
- | | | |
- | LAST-MODIFIED | Current | RFC 5545, Section 3.8.7.3 |
-
-
-
-Desruisseaux Standards Track [Page 157]
-
-RFC 5545 iCalendar September 2009
-
-
- | | | |
- | SEQUENCE | Current | RFC 5545, Section 3.8.7.4 |
- | | | |
- | REQUEST-STATUS | Current | RFC 5545, Section 3.8.8.3 |
- +------------------+------------+----------------------------+
-
-8.3.3. Parameters Registry
-
- The following table has been used to initialize the parameters
- registry.
-
- +----------------+---------+--------------------------+
- | Parameter | Status | Reference |
- +----------------+---------+--------------------------+
- | ALTREP | Current | RFC 5545, Section 3.2.1 |
- | | | |
- | CN | Current | RFC 5545, Section 3.2.2 |
- | | | |
- | CUTYPE | Current | RFC 5545, Section 3.2.3 |
- | | | |
- | DELEGATED-FROM | Current | RFC 5545, Section 3.2.4 |
- | | | |
- | DELEGATED-TO | Current | RFC 5545, Section 3.2.5 |
- | | | |
- | DIR | Current | RFC 5545, Section 3.2.6 |
- | | | |
- | ENCODING | Current | RFC 5545, Section 3.2.7 |
- | | | |
- | FMTTYPE | Current | RFC 5545, Section 3.2.8 |
- | | | |
- | FBTYPE | Current | RFC 5545, Section 3.2.9 |
- | | | |
- | LANGUAGE | Current | RFC 5545, Section 3.2.10 |
- | | | |
- | MEMBER | Current | RFC 5545, Section 3.2.11 |
- | | | |
- | PARTSTAT | Current | RFC 5545, Section 3.2.12 |
- | | | |
- | RANGE | Current | RFC 5545, Section 3.2.13 |
- | | | |
- | RELATED | Current | RFC 5545, Section 3.2.14 |
- | | | |
- | RELTYPE | Current | RFC 5545, Section 3.2.15 |
- | | | |
- | ROLE | Current | RFC 5545, Section 3.2.16 |
- | | | |
- | RSVP | Current | RFC 5545, Section 3.2.17 |
- | | | |
-
-
-
-Desruisseaux Standards Track [Page 158]
-
-RFC 5545 iCalendar September 2009
-
-
- | SENT-BY | Current | RFC 5545, Section 3.2.18 |
- | | | |
- | TZID | Current | RFC 5545, Section 3.2.19 |
- | | | |
- | VALUE | Current | RFC 5545, Section 3.2.20 |
- +----------------+---------+--------------------------+
-
-8.3.4. Value Data Types Registry
-
- The following table has been used to initialize the value data types
- registry.
-
- +-----------------+---------+--------------------------+
- | Value Data Type | Status | Reference |
- +-----------------+---------+--------------------------+
- | BINARY | Current | RFC 5545, Section 3.3.1 |
- | | | |
- | BOOLEAN | Current | RFC 5545, Section 3.3.2 |
- | | | |
- | CAL-ADDRESS | Current | RFC 5545, Section 3.3.3 |
- | | | |
- | DATE | Current | RFC 5545, Section 3.3.4 |
- | | | |
- | DATE-TIME | Current | RFC 5545, Section 3.3.5 |
- | | | |
- | DURATION | Current | RFC 5545, Section 3.3.6 |
- | | | |
- | FLOAT | Current | RFC 5545, Section 3.3.7 |
- | | | |
- | INTEGER | Current | RFC 5545, Section 3.3.8 |
- | | | |
- | PERIOD | Current | RFC 5545, Section 3.3.9 |
- | | | |
- | RECUR | Current | RFC 5545, Section 3.3.10 |
- | | | |
- | TEXT | Current | RFC 5545, Section 3.3.11 |
- | | | |
- | TIME | Current | RFC 5545, Section 3.3.12 |
- | | | |
- | URI | Current | RFC 5545, Section 3.3.13 |
- | | | |
- | UTC-OFFSET | Current | RFC 5545, Section 3.3.14 |
- +-----------------+---------+--------------------------+
-
-
-
-
-
-
-
-
-Desruisseaux Standards Track [Page 159]
-
-RFC 5545 iCalendar September 2009
-
-
-8.3.5. Calendar User Types Registry
-
- The following table has been used to initialize the calendar user
- types registry.
-
- +--------------------+---------+-------------------------+
- | Calendar User Type | Status | Reference |
- +--------------------+---------+-------------------------+
- | INDIVIDUAL | Current | RFC 5545, Section 3.2.3 |
- | | | |
- | GROUP | Current | RFC 5545, Section 3.2.3 |
- | | | |
- | RESOURCE | Current | RFC 5545, Section 3.2.3 |
- | | | |
- | ROOM | Current | RFC 5545, Section 3.2.3 |
- | | | |
- | UNKNOWN | Current | RFC 5545, Section 3.2.3 |
- +--------------------+---------+-------------------------+
-
-8.3.6. Free/Busy Time Types Registry
-
- The following table has been used to initialize the free/busy time
- types registry.
-
- +---------------------+---------+-------------------------+
- | Free/Busy Time Type | Status | Reference |
- +---------------------+---------+-------------------------+
- | FREE | Current | RFC 5545, Section 3.2.9 |
- | | | |
- | BUSY | Current | RFC 5545, Section 3.2.9 |
- | | | |
- | BUSY-UNAVAILABLE | Current | RFC 5545, Section 3.2.9 |
- | | | |
- | BUSY-TENTATIVE | Current | RFC 5545, Section 3.2.9 |
- +---------------------+---------+-------------------------+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Desruisseaux Standards Track [Page 160]
-
-RFC 5545 iCalendar September 2009
-
-
-8.3.7. Participation Statuses Registry
-
- The following table has been used to initialize the participation
- statuses registry.
-
- +--------------------+---------+--------------------------+
- | Participant Status | Status | Reference |
- +--------------------+---------+--------------------------+
- | NEEDS-ACTION | Current | RFC 5545, Section 3.2.12 |
- | | | |
- | ACCEPTED | Current | RFC 5545, Section 3.2.12 |
- | | | |
- | DECLINED | Current | RFC 5545, Section 3.2.12 |
- | | | |
- | TENTATIVE | Current | RFC 5545, Section 3.2.12 |
- | | | |
- | DELEGATED | Current | RFC 5545, Section 3.2.12 |
- | | | |
- | COMPLETED | Current | RFC 5545, Section 3.2.12 |
- | | | |
- | IN-PROCESS | Current | RFC 5545, Section 3.2.12 |
- +--------------------+---------+--------------------------+
-
-8.3.8. Relationship Types Registry
-
- The following table has been used to initialize the relationship
- types registry.
-
- +-------------------+---------+--------------------------+
- | Relationship Type | Status | Reference |
- +-------------------+---------+--------------------------+
- | CHILD | Current | RFC 5545, Section 3.2.15 |
- | | | |
- | PARENT | Current | RFC 5545, Section 3.2.15 |
- | | | |
- | SIBLING | Current | RFC 5545, Section 3.2.15 |
- +-------------------+---------+--------------------------+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Desruisseaux Standards Track [Page 161]
-
-RFC 5545 iCalendar September 2009
-
-
-8.3.9. Participation Roles Registry
-
- The following table has been used to initialize the participation
- roles registry.
-
- +-----------------+---------+--------------------------+
- | Role Type | Status | Reference |
- +-----------------+---------+--------------------------+
- | CHAIR | Current | RFC 5545, Section 3.2.16 |
- | | | |
- | REQ-PARTICIPANT | Current | RFC 5545, Section 3.2.16 |
- | | | |
- | OPT-PARTICIPANT | Current | RFC 5545, Section 3.2.16 |
- | | | |
- | NON-PARTICIPANT | Current | RFC 5545, Section 3.2.16 |
- +-----------------+---------+--------------------------+
-
-8.3.10. Actions Registry
-
- The following table has been used to initialize the actions registry.
-
- +-----------+------------+----------------------------+
- | Action | Status | Reference |
- +-----------+------------+----------------------------+
- | AUDIO | Current | RFC 5545, Section 3.8.6.1 |
- | | | |
- | DISPLAY | Current | RFC 5545, Section 3.8.6.1 |
- | | | |
- | EMAIL | Current | RFC 5545, Section 3.8.6.1 |
- | | | |
- | PROCEDURE | Deprecated | [RFC2445], Section 4.8.6.1 |
- +-----------+------------+----------------------------+
-
-8.3.11. Classifications Registry
-
- The following table has been used to initialize the classifications
- registry.
-
- +----------------+---------+---------------------------+
- | Classification | Status | Reference |
- +----------------+---------+---------------------------+
- | PUBLIC | Current | RFC 5545, Section 3.8.1.3 |
- | | | |
- | PRIVATE | Current | RFC 5545, Section 3.8.1.3 |
- | | | |
- | CONFIDENTIAL | Current | RFC 5545, Section 3.8.1.3 |
- +----------------+---------+---------------------------+
-
-
-
-
-Desruisseaux Standards Track [Page 162]
-
-RFC 5545 iCalendar September 2009
-
-
-8.3.12. Methods Registry
-
- No values are defined in this document for the "METHOD" property.
-
-9. Acknowledgments
-
- The editor of this document wishes to thank Frank Dawson and Derik
- Stenerson, the original authors of RFC 2445, as well as the following
- individuals who have participated in the drafting, review, and
- discussion of this memo:
-
- Joe Abley, Hervey Allen, Steve Allen, Jay Batson, Oliver Block,
- Stephane Bortzmeyer, Chris Bryant, Tantek Celik, Mark Crispin, Cyrus
- Daboo, Mike Douglass, Andrew N. Dowden, Lisa Dusseault, Lars Eggert,
- Gren Eliot, Pasi Eronen, Ben Fortuna, Ned Freed, Neal Gafter, Ted
- Hardie, Tim Hare, Jeffrey Harris, Helge Hess, Paul B. Hill, Thomas
- Hnetila, Russ Housley, Leif Johansson, Ciny Joy, Bruce Kahn, Reinhold
- Kainhofer, Martin Kiff, Patrice Lapierre, Michiel van Leeuwen,
- Jonathan Lennox, Jeff McCullough, Bill McQuillan, Alexey Melnikov,
- John W. Noerenberg II, Chuck Norris, Mark Paterson, Simon Pilette,
- Arnaud Quillaud, Robert Ransdell, Julian F. Reschke, Caleb
- Richardson, Sam Roberts, Dan Romascanu, Mike Samuel, George Sexton,
- Nigel Swinson, Clint Talbert, Simon Vaillancourt, Magnus Westerlund,
- and Sandy Wills.
-
- A special thanks to the working group chairs Aki Niemi and Eliot Lear
- for their support and guidance.
-
- The editor would also like to thank the Calendaring and Scheduling
- Consortium for advice with this specification, and for organizing
- interoperability testing events to help refine it.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Desruisseaux Standards Track [Page 163]
-
-RFC 5545 iCalendar September 2009
-
-
-10. References
-
-10.1. Normative References
-
- [ISO.8601.2004] International Organization for
- Standardization, "Data elements and
- interchange formats -- Information interchange
- -- Representation of dates and times", 2004.
-
- [ISO.9070.1991] International Organization for
- Standardization, "Information Technology_SGML
- Support Facilities -- Registration Procedures
- for Public Text Owner Identifiers, Second
- Edition", April 1991.
-
- [RFC2045] Freed, N. and N. Borenstein, "Multipurpose
- Internet Mail Extensions (MIME) Part One:
- Format of Internet Message Bodies", RFC 2045,
- November 1996.
-
- [RFC2046] Freed, N. and N. Borenstein, "Multipurpose
- Internet Mail Extensions (MIME) Part Two:
- Media Types", RFC 2046, November 1996.
-
- [RFC2119] Bradner, S., "Key words for use in RFCs to
- Indicate Requirement Levels", BCP 14,
- RFC 2119, March 1997.
-
- [RFC2368] Hoffman, P., Masinter, L., and J. Zawinski,
- "The mailto URL scheme", RFC 2368, July 1998.
-
- [RFC3629] Yergeau, F., "UTF-8, a transformation format
- of ISO 10646", STD 63, RFC 3629,
- November 2003.
-
- [RFC3986] Berners-Lee, T., Fielding, R., and L.
- Masinter, "Uniform Resource Identifier (URI):
- Generic Syntax", STD 66, RFC 3986,
- January 2005.
-
- [RFC4288] Freed, N. and J. Klensin, "Media Type
- Specifications and Registration Procedures",
- BCP 13, RFC 4288, December 2005.
-
- [RFC4648] Josefsson, S., "The Base16, Base32, and Base64
- Data Encodings", RFC 4648, October 2006.
-
-
-
-
-
-Desruisseaux Standards Track [Page 164]
-
-RFC 5545 iCalendar September 2009
-
-
- [RFC5234] Crocker, D. and P. Overell, "Augmented BNF for
- Syntax Specifications: ABNF", STD 68,
- RFC 5234, January 2008.
-
- [RFC5646] Phillips, A., Ed., and M. Davis, Ed., "Tags
- for Identifying Languages", BCP 47, RFC 5646,
- September 2009.
-
- [US-ASCII] American National Standards Institute, "Coded
- Character Set - 7-bit American Standard Code
- for Information Interchange", ANSI X3.4, 1986.
-
-10.2. Informative References
-
- [2446bis] Daboo, C., "iCalendar Transport-Independent
- Interoperability Protocol (iTIP)", Work
- in Progress, April 2009.
-
- [2447bis] Melnikov, A., "iCalendar Message-Based
- Interoperability Protocol (iMIP)", Work
- in Progress, June 2008.
-
- [ANSI INCITS 61-1986] International Committee for Information
- Technology, "Representation of Geographic
- Point Locations for Information Interchange
- (formerly ANSI X3.61-1986 (R1997))", ANSI
- INCITS 61-1986 (R2007), 2007.
-
- [RFC1738] Berners-Lee, T., Masinter, L., and M.
- McCahill, "Uniform Resource Locators (URL)",
- RFC 1738, December 1994.
-
- [RFC2392] Levinson, E., "Content-ID and Message-ID
- Uniform Resource Locators", RFC 2392,
- August 1998.
-
- [RFC2397] Masinter, L., "The "data" URL scheme",
- RFC 2397, August 1998.
-
- [RFC2425] Howes, T., Smith, M., and F. Dawson, "A MIME
- Content-Type for Directory Information",
- RFC 2425, September 1998.
-
- [RFC2426] Dawson, F. and T. Howes, "vCard MIME Directory
- Profile", RFC 2426, September 1998.
-
-
-
-
-
-
-Desruisseaux Standards Track [Page 165]
-
-RFC 5545 iCalendar September 2009
-
-
- [RFC2445] Dawson, F. and Stenerson, D., "Internet
- Calendaring and Scheduling Core Object
- Specification (iCalendar)", RFC 2445,
- November 1998.
-
- [RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk,
- H., Masinter, L., Leach, P., and T. Berners-
- Lee, "Hypertext Transfer Protocol --
- HTTP/1.1", RFC 2616, June 1999.
-
- [RFC2818] Rescorla, E., "HTTP Over TLS", RFC 2818,
- May 2000.
-
- [RFC4516] Smith, M. and T. Howes, "Lightweight Directory
- Access Protocol (LDAP): Uniform Resource
- Locator", RFC 4516, June 2006.
-
- [RFC4791] Daboo, C., Desruisseaux, B., and L. Dusseault,
- "Calendaring Extensions to WebDAV (CalDAV)",
- RFC 4791, March 2007.
-
- [TZDB] Eggert, P. and A.D. Olson, "Sources for Time
- Zone and Daylight Saving Time Data",
- July 2009,
- .
-
- [VCAL] Internet Mail Consortium, "vCalendar: The
- Electronic Calendaring and Scheduling Exchange
- Format", September 1996,
- .
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Desruisseaux Standards Track [Page 166]
-
-RFC 5545 iCalendar September 2009
-
-
-Appendix A. Differences from RFC 2445
-
- This appendix contains a list of changes that have been made in the
- Internet Calendaring and Scheduling Core Object Specification from
- RFC 2445.
-
-A.1. New Restrictions
-
- 1. The "DTSTART" property SHOULD be synchronized with the recurrence
- rule, if specified.
-
- 2. The "RRULE" property SHOULD NOT occur more than once in a
- component.
-
- 3. The BYHOUR, BYMINUTE, and BYSECOND rule parts MUST NOT be
- specified in the "RRULE" property when the "DTSTART" property is
- specified as a DATE value.
-
- 4. The value type of the "DTEND" or "DUE" properties MUST match the
- value type of "DTSTART" property.
-
- 5. The "DURATION" property can no longer appear in "VFREEBUSY"
- components.
-
-A.2. Restrictions Removed
-
- 1. The "DTSTART" and "DTEND" properties are no longer required to be
- specified as date with local time and time zone reference when
- used with a recurrence rule.
-
-A.3. Deprecated Features
-
- 1. The "EXRULE" property can no longer be specified in a component.
-
- 2. The "THISANDPRIOR" value can no longer be used with the "RANGE"
- parameter.
-
- 3. The "PROCEDURE" value can no longer be used with the "ACTION"
- property.
-
- 4. The value type RECUR no longer allows multiple values to be
- specified by a COMMA-separated list of values.
-
- 5. x-name rule parts can no longer be specified in properties of
- RECUR value type (e.g., "RRULE"). x-param can be used on RECUR
- value type properties instead.
-
-
-
-
-
-Desruisseaux Standards Track [Page 167]
-
-RFC 5545 iCalendar September 2009
-
-
-Author's Address
-
- Bernard Desruisseaux (editor)
- Oracle Corporation
- 600 blvd. de Maisonneuve West
- Suite 1900
- Montreal, QC H3A 3J2
- CANADA
-
- EMail: bernard.desruisseaux@oracle.com
- URI: http://www.oracle.com/
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Desruisseaux Standards Track [Page 168]
-
diff --git a/specifications/calendar/rfc5546.txt b/specifications/calendar/rfc5546.txt
deleted file mode 100644
index 80361d81..00000000
--- a/specifications/calendar/rfc5546.txt
+++ /dev/null
@@ -1,7451 +0,0 @@
-
-
-
-
-
-
-Network Working Group C. Daboo, Ed.
-Request for Comments: 5546 Apple Inc.
-Obsoletes: 2446 December 2009
-Updates: 5545
-Category: Standards Track
-
-
- iCalendar Transport-Independent Interoperability Protocol (iTIP)
-
-Abstract
-
- This document specifies a protocol that uses the iCalendar object
- specification to provide scheduling interoperability between
- different calendaring systems. This is done without reference to a
- specific transport protocol so as to allow multiple methods of
- communication between systems. Subsequent documents will define
- profiles of this protocol that use specific, interoperable methods of
- communication between systems.
-
- The iCalendar Transport-Independent Interoperability Protocol (iTIP)
- complements the iCalendar object specification by adding semantics
- for group scheduling methods commonly available in current
- calendaring systems. These scheduling methods permit two or more
- calendaring systems to perform transactions such as publishing,
- scheduling, rescheduling, responding to scheduling requests,
- negotiating changes, or canceling.
-
-Status of This Memo
-
- This document specifies an Internet standards track protocol for the
- Internet community, and requests discussion and suggestions for
- improvements. Please refer to the current edition of the "Internet
- Official Protocol Standards" (STD 1) for the standardization state
- and status of this protocol. Distribution of this memo is unlimited.
-
-Copyright Notice
-
- Copyright (c) 2009 IETF Trust and the persons identified as the
- document authors. All rights reserved.
-
- This document is subject to BCP 78 and the IETF Trust's Legal
- Provisions Relating to IETF Documents
- (http://trustee.ietf.org/license-info) in effect on the date of
- publication of this document. Please review these documents
- carefully, as they describe your rights and restrictions with respect
- to this document. Code Components extracted from this document must
-
-
-
-
-
-Daboo Standards Track [Page 1]
-
-RFC 5546 iTIP December 2009
-
-
- include Simplified BSD License text as described in Section 4.e of
- the Trust Legal Provisions and are provided without warranty as
- described in the BSD License.
-
- This document may contain material from IETF Documents or IETF
- Contributions published or made publicly available before November
- 10, 2008. The person(s) controlling the copyright in some of this
- material may not have granted the IETF Trust the right to allow
- modifications of such material outside the IETF Standards Process.
- Without obtaining an adequate license from the person(s) controlling
- the copyright in such materials, this document may not be modified
- outside the IETF Standards Process, and derivative works of it may
- not be created outside the IETF Standards Process, except to format
- it for publication as an RFC or to translate it into languages other
- than English.
-
-Table of Contents
-
- 1. Introduction and Overview .......................................5
- 1.1. Formatting Conventions .....................................5
- 1.2. Related Documents ..........................................6
- 1.3. Roles ......................................................6
- 1.4. Methods ....................................................7
- 2. Interoperability Models .........................................9
- 2.1. Application Protocol ......................................10
- 2.1.1. Scheduling State ...................................10
- 2.1.2. Delegation .........................................10
- 2.1.3. Acting on Behalf of Other Calendar Users ...........11
- 2.1.4. Component Revisions ................................11
- 2.1.5. Message Sequencing .................................12
- 3. Application Protocol Elements ..................................13
- 3.1. Common Component Restriction Tables .......................15
- 3.1.1. VCALENDAR ..........................................15
- 3.1.2. VTIMEZONE ..........................................15
- 3.1.3. VALARM .............................................17
- 3.2. Methods for VEVENT Calendar Components ....................17
- 3.2.1. PUBLISH ............................................18
- 3.2.2. REQUEST ............................................20
- 3.2.3. REPLY ..............................................25
- 3.2.4. ADD ................................................27
- 3.2.5. CANCEL .............................................29
- 3.2.6. REFRESH ............................................31
- 3.2.7. COUNTER ............................................33
- 3.2.8. DECLINECOUNTER .....................................35
- 3.3. Methods for VFREEBUSY Components ..........................37
- 3.3.1. PUBLISH ............................................37
- 3.3.2. REQUEST ............................................40
- 3.3.3. REPLY ..............................................42
-
-
-
-Daboo Standards Track [Page 2]
-
-RFC 5546 iTIP December 2009
-
-
- 3.4. Methods for VTODO Components ..............................44
- 3.4.1. PUBLISH ............................................44
- 3.4.2. REQUEST ............................................46
- 3.4.3. REPLY ..............................................51
- 3.4.4. ADD ................................................53
- 3.4.5. CANCEL .............................................55
- 3.4.6. REFRESH ............................................57
- 3.4.7. COUNTER ............................................59
- 3.4.8. DECLINECOUNTER .....................................61
- 3.5. Methods for VJOURNAL Components ...........................62
- 3.5.1. PUBLISH ............................................63
- 3.5.2. ADD ................................................64
- 3.5.3. CANCEL .............................................66
- 3.6. Status Replies ............................................68
- 3.7. Implementation Considerations .............................77
- 3.7.1. Working With Recurrence Instances ..................77
- 3.7.2. Attendee Property Considerations ...................78
- 3.7.3. Extension Tokens ...................................79
- 4. Examples .......................................................79
- 4.1. Published Event Examples ..................................79
- 4.1.1. A Minimal Published Event ..........................80
- 4.1.2. Changing a Published Event .........................80
- 4.1.3. Canceling a Published Event ........................81
- 4.1.4. A Rich Published Event .............................81
- 4.1.5. Anniversaries or Events Attached to Entire Days ....83
- 4.2. Group Event Examples ......................................83
- 4.2.1. A Group Event Request ..............................84
- 4.2.2. Reply to a Group Event Request .....................85
- 4.2.3. Update an Event ....................................85
- 4.2.4. Countering an Event Proposal .......................86
- 4.2.5. Delegating an Event ................................88
- 4.2.6. Delegate Accepts the Meeting .......................90
- 4.2.7. Delegate Declines the Meeting ......................91
- 4.2.8. Forwarding an Event Request ........................92
- 4.2.9. Cancel a Group Event ...............................92
- 4.2.10. Removing Attendees ................................93
- 4.2.11. Replacing the Organizer ...........................95
- 4.3. Busy Time Examples ........................................96
- 4.3.1. Publish Busy Time ..................................96
- 4.3.2. Request Busy Time ..................................96
- 4.3.3. Reply to a Busy Time Request .......................97
- 4.4. Recurring Event and Time Zone Examples ....................98
- 4.4.1. A Recurring Event Spanning Time Zones ..............98
- 4.4.2. Modify a Recurring Instance ........................99
- 4.4.3. Cancel an Instance ................................101
- 4.4.4. Cancel a Recurring Event ..........................101
- 4.4.5. Change All Future Instances .......................102
- 4.4.6. Add a New Instance to a Recurring Event ...........102
-
-
-
-Daboo Standards Track [Page 3]
-
-RFC 5546 iTIP December 2009
-
-
- 4.4.7. Add a New Series of Instances to a
- Recurring Event ...................................103
- 4.4.8. Refreshing a Recurring Event ......................104
- 4.4.9. Counter an Instance of a Recurring Event ..........106
- 4.4.10. Error Reply to a Request .........................107
- 4.5. Group To-Do Examples .....................................108
- 4.5.1. A VTODO Request ...................................109
- 4.5.2. A VTODO Reply .....................................110
- 4.5.3. A VTODO Request for Updated Status ................110
- 4.5.4. A Reply: Percent-Complete .........................111
- 4.5.5. A Reply: Completed ................................111
- 4.5.6. An Updated VTODO Request ..........................112
- 4.5.7. Recurring VTODOs ..................................112
- 4.6. Journal Examples .........................................113
- 4.7. Other Examples ...........................................114
- 4.7.1. Event Refresh .....................................114
- 4.7.2. Bad RECURRENCE-ID .................................114
- 5. Application Protocol Fallbacks ................................116
- 5.1. Partial Implementation ...................................116
- 5.1.1. Event-Related Fallbacks ...........................117
- 5.1.2. Free/Busy-Related Fallbacks .......................119
- 5.1.3. To-Do-Related Fallbacks ...........................120
- 5.1.4. Journal-Related Fallbacks .........................122
- 5.2. Latency Issues ...........................................123
- 5.2.1. Cancellation of an Unknown Calendar Component .....123
- 5.2.2. Unexpected Reply from an Unknown Delegate .........124
- 5.3. Sequence Number ..........................................124
- 6. Security Considerations .......................................124
- 6.1. Security Threats .........................................124
- 6.1.1. Spoofing the Organizer ............................124
- 6.1.2. Spoofing the Attendee .............................124
- 6.1.3. Unauthorized Replacement of the Organizer .........125
- 6.1.4. Eavesdropping and Data Integrity ..................125
- 6.1.5. Flooding a Calendar ...............................125
- 6.1.6. Unauthorized REFRESH Requests .....................125
- 6.2. Recommendations ..........................................125
- 6.2.1. Securing iTIP transactions ........................125
- 6.2.2. Implementation Controls ...........................126
- 6.2.3. Access Controls and Filtering .....................126
- 6.3. Privacy Issues ...........................................126
- 7. IANA Considerations ...........................................127
- 7.1. Registration Template for REQUEST-STATUS Values ..........127
- 7.2. Additions to iCalendar METHOD Registry ...................127
- 7.3. REQUEST-STATUS Value Registry ............................129
- 8. Acknowledgments ...............................................130
- 9. References ....................................................131
- 9.1. Normative References .....................................131
- 9.2. Informative References ...................................131
-
-
-
-Daboo Standards Track [Page 4]
-
-RFC 5546 iTIP December 2009
-
-
- Appendix A. Differences from RFC 2446 ...........................132
- A.1. Changed Restrictions .....................................132
- A.2. Deprecated Features ......................................133
-
-1. Introduction and Overview
-
- This document specifies how calendaring systems use iCalendar
- [RFC5545] objects to interoperate with other calendaring systems. In
- particular, it specifies how to schedule events, to-dos, or daily
- journal entries. It further specifies how to search for available
- busy time information. It does so in a general way, without
- specifying how communication between different systems actually takes
- place. Subsequent documents will specify transport bindings between
- systems that use this protocol.
-
- This protocol is based on messages sent from an originator to one or
- more recipients. For certain types of messages, a recipient may
- reply in order to update their status and may also return
- transaction/request status information. The protocol supports the
- ability for the message originator to modify or cancel the original
- message. The protocol also supports the ability for recipients to
- suggest changes to the originator of a message. The elements of the
- protocol also define the user roles for its transactions.
-
- This specification obsoletes RFC 2446 - a list of important changes
- is provided in Appendix A.
-
-1.1. Formatting Conventions
-
- The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
- "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
- document are to be interpreted as described in [RFC2119].
-
- Calendaring and scheduling roles are referred to in quoted-strings of
- text with the first character of each word in upper case. For
- example, "Organizer" refers to a role of a "Calendar User" (CU)
- within the scheduling protocol.
-
- Calendar components defined by [RFC5545] are referred to with
- capitalized, quoted-strings of text. All calendar components start
- with the letter "V". For example, "VEVENT" refers to the event
- calendar component, "VTODO" refers to the to-do calendar component,
- and "VJOURNAL" refers to the daily journal calendar component.
-
-
-
-
-
-
-
-
-Daboo Standards Track [Page 5]
-
-RFC 5546 iTIP December 2009
-
-
- Scheduling methods are referred to with capitalized, quoted-strings
- of text. For example, "REQUEST" refers to the method for requesting
- a scheduling calendar component be created or modified; "REPLY"
- refers to the method a recipient of a request uses to update their
- status with the "Organizer" of the calendar component.
-
- Properties defined by [RFC5545] are referred to with capitalized,
- quoted-strings of text, followed by the word "property". For
- example, "ATTENDEE" property refers to the iCalendar property used to
- convey the calendar address of a "Calendar User".
-
- Property parameters defined by this specification are referred to
- with capitalized, quoted-strings of text, followed by the word
- "parameter". For example, "VALUE" parameter refers to the iCalendar
- property parameter used to override the default data type for a
- property value.
-
- Enumerated values defined by this specification are referred to with
- capitalized text, either alone or followed by the word "value".
-
- In tables, the quoted-string text is specified without quotes in
- order to minimize the table length.
-
-1.2. Related Documents
-
- Implementers will need to be familiar with several other
- specifications that, along with this one, describe the Internet
- calendaring and scheduling standards. The related documents are:
-
- [RFC5545] - specifies the objects, data types, properties, and
- property parameters used in the protocols, along with the methods
- for representing and encoding them.
-
- [iMIP] - specifies an Internet email binding for iTIP.
-
- This specification does not attempt to repeat the concepts or
- definitions from these other specifications. Where possible,
- explicit references are made to the other specifications.
-
-1.3. Roles
-
- Exchanges of iCalendar objects for the purposes of group calendaring
- and scheduling occur between "Calendar Users" (CUs). CUs take on
- several roles in iTIP:
-
-
-
-
-
-
-
-Daboo Standards Track [Page 6]
-
-RFC 5546 iTIP December 2009
-
-
- +-----------+-------------------------------------------------------+
- | Role | Description |
- +-----------+-------------------------------------------------------+
- | Organizer | The CU who initiates an exchange takes on the role of |
- | | Organizer. For example, the CU who proposes a group |
- | | meeting is the Organizer. |
- | | |
- | Attendee | CUs who are included in the scheduling message as |
- | | possible recipients of that scheduling message. For |
- | | example, the CUs asked to participate in a group |
- | | meeting by the Organizer take on the role of |
- | | Attendee. |
- | | |
- | Other CU | A CU that is not explicitly included in a scheduling |
- | | message, i.e., not the Organizer or an Attendee. |
- +-----------+-------------------------------------------------------+
-
- Note that "ROLE" is also a descriptive parameter to the iCalendar
- "ATTENDEE" property. Its use is to convey descriptive context about
- an "Attendee" -- such as "chair", "required participant", or "non-
- required participant" -- and has nothing to do with the calendaring
- workflow.
-
-1.4. Methods
-
- The iTIP methods are listed below and their usage and semantics are
- defined in Section 3 of this document.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Daboo Standards Track [Page 7]
-
-RFC 5546 iTIP December 2009
-
-
- +----------------+--------------------------------------------------+
- | Method | Description |
- +----------------+--------------------------------------------------+
- | PUBLISH | Used to publish an iCalendar object to one or |
- | | more "Calendar Users". There is no |
- | | interactivity between the publisher and any |
- | | other "Calendar User". An example might include |
- | | a baseball team publishing its schedule to the |
- | | public. |
- | | |
- | REQUEST | Used to schedule an iCalendar object with other |
- | | "Calendar Users". Requests are interactive in |
- | | that they require the receiver to respond using |
- | | the reply methods. Meeting requests, busy-time |
- | | requests, and the assignment of tasks to other |
- | | "Calendar Users" are all examples. Requests are |
- | | also used by the Organizer to update the status |
- | | of an iCalendar object. |
- | | |
- | REPLY | A reply is used in response to a request to |
- | | convey Attendee status to the Organizer. |
- | | Replies are commonly used to respond to meeting |
- | | and task requests. |
- | | |
- | ADD | Add one or more new instances to an existing |
- | | recurring iCalendar object. |
- | | |
- | CANCEL | Cancel one or more instances of an existing |
- | | iCalendar object. |
- | | |
- | REFRESH | Used by an Attendee to request the latest |
- | | version of an iCalendar object. |
- | | |
- | COUNTER | Used by an Attendee to negotiate a change in an |
- | | iCalendar object. Examples include the request |
- | | to change a proposed event time or change the |
- | | due date for a task. |
- | | |
- | DECLINECOUNTER | Used by the Organizer to decline the proposed |
- | | counter proposal. |
- +----------------+--------------------------------------------------+
-
-
-
-
-
-
-
-
-
-
-Daboo Standards Track [Page 8]
-
-RFC 5546 iTIP December 2009
-
-
- Group scheduling in iTIP is accomplished using the set of "request"
- and "response" methods described above. The following table shows
- the methods broken down by who can send them.
-
- +------------+------------------------------------------------------+
- | Originator | Methods |
- +------------+------------------------------------------------------+
- | Organizer | PUBLISH, REQUEST, ADD, CANCEL, DECLINECOUNTER |
- | | |
- | Attendee | REPLY, REFRESH, COUNTER, REQUEST (only when |
- | | delegating) |
- +------------+------------------------------------------------------+
-
- Note that for some calendar component types, the allowable methods
- are a subset of the above set. In addition, apart from "VTIMEZONE"
- iCalendar components, only one component type is allowed in a single
- iTIP message.
-
-2. Interoperability Models
-
- There are two distinct protocols relevant to interoperability: an
- "application protocol" and a "transport protocol". The application
- protocol defines the content of the iCalendar objects sent between
- sender and receiver to accomplish the scheduling transactions listed
- above. The transport protocol defines how the iCalendar objects are
- sent between the sender and receiver. This document focuses on the
- application protocol. Binding documents such as [iMIP] focus on the
- transport protocol.
-
- The connection between sender and receiver in the diagram below
- refers to the application protocol. The iCalendar objects passed
- from the sender to the receiver are presented in Section 3,
- "Application Protocol Elements".
-
- +----------+ +----------+
- | | iTIP | |
- | Sender |<-------------->| Receiver |
- | | | |
- +----------+ +----------+
-
- There are several variations of this diagram in which the sender and
- receiver take on various roles of a "Calendar User Agent" (CUA) or a
- "Calendar Service" (CS).
-
- The architecture of iTIP is depicted in the diagram below. An
- application written to this specification may work with bindings for
- the store-and-forward transport, the real-time transport, or both.
- Also note that iTIP could be bound to other transports.
-
-
-
-Daboo Standards Track [Page 9]
-
-RFC 5546 iTIP December 2009
-
-
- +--------------------------------------------------------+
- | iTIP Protocol |
- +--------------------------------------------------------+
- | Transport |
- + - - - - - + - - - - - - + - - - - - +
- | Real-Time | Store-and-Forward | Others |
- +-----------------+--------------------+-----------------+
-
-2.1. Application Protocol
-
- In the iTIP model, an iCalendar object is created and managed by an
- "Organizer". The "Organizer" interacts with other CUs by sending one
- or more of the iTIP messages listed above. "Attendees" use the
- "REPLY" method to communicate their status. "Attendees" do not make
- direct changes to the master iCalendar object. They can, however,
- use the "COUNTER" method to suggest changes to the "Organizer". In
- any case, the "Organizer" has complete control over the master
- iCalendar object.
-
-2.1.1. Scheduling State
-
- There are two distinct states relevant to iCalendar objects used in
- scheduling: the overall state of the iCalendar object and the state
- associated with an "Attendee" in that iCalendar object.
-
- The state of an iCalendar object is defined by the "STATUS" property
- and is controlled by the "Organizer." There is no default value for
- the "STATUS" property. The "Organizer" sets the "STATUS" property to
- the appropriate value for each iCalendar object.
-
- The state of a particular "Attendee" relative to an iCalendar object
- used for scheduling is defined by the "PARTSTAT" parameter in the
- "ATTENDEE" property for each "Attendee". When an "Organizer" issues
- the initial iCalendar object, "Attendee" status is typically unknown.
- The "Organizer" specifies this by setting the "PARTSTAT" parameter to
- "NEEDS-ACTION". Each "Attendee" modifies their "ATTENDEE" property
- "PARTSTAT" parameter to an appropriate value as part of a "REPLY"
- message sent back to the "Organizer".
-
-2.1.2. Delegation
-
- Delegation is defined as the process by which an "Attendee" grants
- another CU (or several CUs) the right to attend on their behalf. The
- "Organizer" is made aware of this change because the delegating
- "Attendee" informs the "Organizer". These steps are detailed in the
- "REQUEST" method sections for the appropriate components.
-
-
-
-
-
-Daboo Standards Track [Page 10]
-
-RFC 5546 iTIP December 2009
-
-
-2.1.3. Acting on Behalf of Other Calendar Users
-
- In many organizations, one user will act on behalf of another to
- organize and/or respond to meeting requests. iTIP provides two
- mechanisms that support these activities.
-
- First, the "Organizer" is treated as a special entity, separate from
- "Attendees". All responses from "Attendees" flow to the "Organizer",
- making it easy to separate a "Calendar User" organizing a meeting
- from "Calendar Users" attending the meeting. Additionally, iCalendar
- provides descriptive roles for each "Attendee". For instance, a role
- of "chair" may be ascribed to one or more "Attendees". The "chair"
- and the "Organizer" may or may not be the same "Calendar User". This
- maps well to scenarios where an assistant may manage meeting
- logistics for another individual who chairs a meeting.
-
- Second, a "SENT-BY" parameter may be specified in either the
- "Organizer" or "Attendee" properties. When specified, the "SENT-BY"
- parameter indicates that the responding CU acted on behalf of the
- specified "Attendee" or "Organizer".
-
-2.1.4. Component Revisions
-
- The "SEQUENCE" property is used by the "Organizer" to indicate
- revisions to the calendar component. When the "Organizer" makes
- changes to one of the following properties, the sequence number MUST
- be incremented:
-
- o "DTSTART"
-
- o "DTEND"
-
- o "DURATION"
-
- o "DUE"
-
- o "RRULE"
-
- o "RDATE"
-
- o "EXDATE"
-
- o "STATUS"
-
- In addition, changes made by the "Organizer" to other properties MAY
- also require the sequence number to be incremented. The "Organizer"
- CUA MUST increment the sequence number whenever it makes changes to
- properties in the calendar component that the "Organizer" deems will
-
-
-
-Daboo Standards Track [Page 11]
-
-RFC 5546 iTIP December 2009
-
-
- jeopardize the validity of the participation status of the
- "Attendees". For example, changing the location of a meeting from
- one location to another distant location could effectively impact the
- participation status of the "Attendees".
-
- Depending on the "METHOD", the "SEQUENCE" property MUST follow these
- rules in the context of iTIP:
-
- o For the "PUBLISH" and "REQUEST" methods, the "SEQUENCE" property
- value is incremented according to the rules stated above.
-
- o The "SEQUENCE" property value MUST be incremented each time the
- "Organizer" uses the "ADD" or "CANCEL" methods.
-
- o The "SEQUENCE" property value MUST NOT be incremented when using
- "REPLY", "REFRESH", "COUNTER", "DECLINECOUNTER", or when sending a
- delegation "REQUEST".
-
- In some circumstances, the "Organizer" may not have received
- responses to the final revision sent out. In this situation, the
- "Organizer" may wish to send an update "REQUEST" and set "RSVP=TRUE"
- for all "Attendees" so that current responses can be collected.
-
- The value of the "SEQUENCE" property contained in a response from an
- "Attendee" may not always match the "Organizer's" revision.
- Implementations may choose to have the CUA indicate to the CU that
- the response is to an iCalendar object that has been revised, and
- allow the CU to decide whether or not to accept the response.
-
- Whilst a change in sequence number is indicative of a significant
- change to a previously scheduled item, "Attendee" CUAs SHOULD NOT
- rely solely on a change in sequence number as a means of detecting a
- significant change. Instead, CUAs SHOULD compare the old and new
- versions of the calendar components, determine the exact nature of
- the changes, and make decisions -- possibly based on "Calendar User"
- preferences -- as to whether the user needs to be explicitly informed
- of the change.
-
-2.1.5. Message Sequencing
-
- CUAs that handle the iTIP application protocol must often correlate a
- component in a calendar store with a component received in the iTIP
- message. For example, an event may be updated with a later revision
- of the same event. To accomplish this, a CUA must correlate the
- version of the event already in its calendar store with the version
- sent in the iTIP message. In addition to this correlation, there are
- several factors that can cause iTIP messages to arrive in an
- unexpected order. That is, an "Organizer" could receive a reply to
-
-
-
-Daboo Standards Track [Page 12]
-
-RFC 5546 iTIP December 2009
-
-
- an earlier revision of a component after receiving a reply to a later
- revision.
-
- To maximize interoperability and to handle messages that arrive in an
- unexpected order, use the following rules:
-
- 1. The primary key for referencing a particular iCalendar component
- is the "UID" property value. To reference an instance of a
- recurring component, the primary key is composed of the "UID" and
- the "RECURRENCE-ID" properties.
-
- 2. The secondary key for referencing a component is the "SEQUENCE"
- property value. For components where the "UID" and
- "RECURRENCE-ID" property values are the same, the component with
- the highest numeric value for the "SEQUENCE" property obsoletes
- all other revisions of the component with lower values.
-
- 3. "Attendees" send "REPLY" messages to the "Organizer". For
- replies where the "UID" and "RECURRENCE-ID" property values are
- the same, the value of the "SEQUENCE" property indicates the
- revision of the component to which the "Attendee" is replying.
- The reply with the highest numeric value for the "SEQUENCE"
- property obsoletes all other replies with lower values.
-
- 4. In situations where the "UID", "RECURRENCE-ID", and "SEQUENCE"
- property values match, the "DTSTAMP" property is used as the tie-
- breaker. The component with the latest "DTSTAMP" overrides all
- others. Similarly, for "Attendee" responses where the "UID",
- "RECURRENCE-ID", and "SEQUENCE" property values match, the
- response with the latest "DTSTAMP" overrides all others.
-
- Hence, CUAs will need to persist the following component properties
- in order to correctly process iTIP messages: "UID", "RECURRENCE-ID",
- "SEQUENCE", and "DTSTAMP". Furthermore, for each "ATTENDEE" property
- of a component, "Organizer" CUAs will need to persist the "SEQUENCE"
- and "DTSTAMP" property values associated with the "Attendee's" last
- response, so that any earlier responses from an "Attendee" that are
- received out of order (e.g., due to a delay in the transport) can be
- correctly discarded.
-
-3. Application Protocol Elements
-
- iTIP messages are "text/calendar" MIME entities that contain
- calendaring and scheduling information. The particular type of
- iCalendar message is referred to as the "method type". Each method
- type is identified by a "METHOD" property specified as part of the
- "text/calendar" content type. The table below shows various
-
-
-
-
-Daboo Standards Track [Page 13]
-
-RFC 5546 iTIP December 2009
-
-
- combinations of calendar components and the method types that this
- specification supports.
-
- +----------------+--------+-------+----------+-----------+
- | | VEVENT | VTODO | VJOURNAL | VFREEBUSY |
- +----------------+--------+-------+----------+-----------+
- | PUBLISH | Yes | Yes | Yes | Yes |
- | REQUEST | Yes | Yes | No | Yes |
- | REFRESH | Yes | Yes | No | No |
- | CANCEL | Yes | Yes | Yes | No |
- | ADD | Yes | Yes | Yes | No |
- | REPLY | Yes | Yes | No | Yes |
- | COUNTER | Yes | Yes | No | No |
- | DECLINECOUNTER | Yes | Yes | No | No |
- +----------------+--------+-------+----------+-----------+
-
- Each method type is defined in terms of its associated components and
- properties. Some components and properties are required, some are
- optional, and others are excluded. The restrictions are expressed in
- this document using a simple "restriction table". The first column
- indicates the name of a component or property. Properties of the
- iCalendar object are not indented. Properties of a component are
- indented. The second column (the "Presence" column) indicates
- whether or not a component or property should be present and, if
- present, how many times it can occur. The third column contains
- comments for further clarification.
-
- The presence column uses the following values to assert whether a
- property is required or optional, and the number of times it may
- appear in the iCalendar object.
-
- +----------------+--------------------------------------------------+
- | Presence Value | Description |
- +----------------+--------------------------------------------------+
- | 1 | One instance MUST be present. |
- | 1+ | At least one instance MUST be present. |
- | 0 | Instances of this property MUST NOT be present. |
- | 0+ | Multiple instances MAY be present. |
- | 0 or 1 | Up to 1 instance of this property MAY be |
- | | present. |
- +----------------+--------------------------------------------------+
-
- The tables also call out "IANA-PROPERTY", "X-PROPERTY", "IANA-
- COMPONENT", and "X-COMPONENT" to show where registered and
- experimental property and component extensions can appear. The
- tables do not lay out the restrictions of property parameters. Those
- restrictions are defined in [RFC5545].
-
-
-
-
-Daboo Standards Track [Page 14]
-
-RFC 5546 iTIP December 2009
-
-
-3.1. Common Component Restriction Tables
-
-3.1.1. VCALENDAR
-
- The restriction table below applies to properties of the iCalendar
- object. That is, the properties at the outermost scope.
-
- +-----------------------------------------------------+
- | Constraints for Properties in a VCALENDAR Component |
- +-----------------------------------------------------+
-
- +--------------------+----------+--------------------+
- | Component/Property | Presence | Comment |
- +--------------------+----------+--------------------+
- | CALSCALE | 0 or 1 | |
- | PRODID | 1 | |
- | VERSION | 1 | Value MUST be 2.0. |
- | IANA-PROPERTY | 0+ | |
- | X-PROPERTY | 0+ | |
- +--------------------+----------+--------------------+
-
-3.1.2. VTIMEZONE
-
- "VTIMEZONE" components may be referred to by other components via a
- "TZID" parameter on a "DATETIME" value type. The property
- restrictions in the table below apply to any "VTIMEZONE" component in
- an iTIP message.
-
- +--------------------------------------+
- | Constraints for VTIMEZONE Components |
- +--------------------------------------+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Daboo Standards Track [Page 15]
-
-RFC 5546 iTIP December 2009
-
-
- +--------------------+----------+-----------------------------------+
- | Component/Property | Presence | Comment |
- +--------------------+----------+-----------------------------------+
- | VTIMEZONE | 0+ | MUST be present if any date/time |
- | | | refers to timezone. |
- | DAYLIGHT | 0+ | MUST be one or more of either |
- | | | STANDARD or DAYLIGHT. |
- | COMMENT | 0+ | |
- | DTSTART | 1 | MUST be local time format. |
- | RDATE | 0+ | |
- | RRULE | 0 or 1 | |
- | TZNAME | 0+ | |
- | TZOFFSETFROM | 1 | |
- | TZOFFSETTO | 1 | |
- | IANA-PROPERTY | 0+ | |
- | X-PROPERTY | 0+ | |
- | LAST-MODIFIED | 0 or 1 | |
- | STANDARD | 0+ | MUST be one or more of either |
- | | | STANDARD or DAYLIGHT. |
- | COMMENT | 0+ | |
- | DTSTART | 1 | MUST be local time format. |
- | RDATE | 0+ | If present, RRULE MUST NOT be |
- | | | present. |
- | RRULE | 0 or 1 | If present, RDATE MUST NOT be |
- | | | present. |
- | TZNAME | 0+ | |
- | TZOFFSETFROM | 1 | |
- | TZOFFSETTO | 1 | |
- | IANA-PROPERTY | 0+ | |
- | X-PROPERTY | 0+ | |
- | TZID | 1 | |
- | TZURL | 0 or 1 | |
- | IANA-PROPERTY | 0+ | |
- | X-PROPERTY | 0+ | |
- +--------------------+----------+-----------------------------------+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Daboo Standards Track [Page 16]
-
-RFC 5546 iTIP December 2009
-
-
-3.1.3. VALARM
-
- The property restrictions in the table below apply to any "VALARM"
- component in an iTIP message.
-
- +-----------------------------------+
- | Constraints for VALARM Components |
- +-----------------------------------+
-
- +--------------------+----------+-----------------------------------+
- | Component/Property | Presence | Comment |
- +--------------------+----------+-----------------------------------+
- | VALARM | 0+ | |
- | ACTION | 1 | |
- | ATTACH | 0+ | |
- | ATTENDEE | 0+ | |
- | DESCRIPTION | 0 or 1 | |
- | DURATION | 0 or 1 | If present, REPEAT MUST be |
- | | | present. |
- | REPEAT | 0 or 1 | If present, DURATION MUST be |
- | | | present. |
- | SUMMARY | 0 or 1 | |
- | TRIGGER | 1 | |
- | IANA-PROPERTY | 0+ | |
- | X-PROPERTY | 0+ | |
- +--------------------+----------+-----------------------------------+
-
-3.2. Methods for VEVENT Calendar Components
-
- This section defines the property set restrictions for the method
- types that are applicable to the "VEVENT" calendar component. Each
- method is defined using a table that clarifies the property
- constraints that define the particular method.
-
- The following summarizes the methods that are defined for the
- "VEVENT" calendar component.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Daboo Standards Track [Page 17]
-
-RFC 5546 iTIP December 2009
-
-
- +----------------+--------------------------------------------------+
- | Method | Description |
- +----------------+--------------------------------------------------+
- | PUBLISH | Post notification of an event. Used primarily |
- | | as a method of advertising the existence of an |
- | | event. |
- | | |
- | REQUEST | Make a request for an event. This is an |
- | | explicit invitation to one or more Attendees. |
- | | Event requests are also used to update or change |
- | | an existing event. Clients that cannot handle |
- | | REQUEST MAY degrade the event to view it as a |
- | | PUBLISH. |
- | | |
- | REPLY | Reply to an event request. Clients may set |
- | | their status (PARTSTAT) to ACCEPTED, DECLINED, |
- | | TENTATIVE, or DELEGATED. |
- | | |
- | ADD | Add one or more instances to an existing event. |
- | | |
- | CANCEL | Cancel one or more instances of an existing |
- | | event. |
- | | |
- | REFRESH | A request is sent to an Organizer by an Attendee |
- | | asking for the latest version of an event to be |
- | | resent to the requester. |
- | | |
- | COUNTER | Counter a REQUEST with an alternative proposal. |
- | | Sent by an Attendee to the Organizer. |
- | | |
- | DECLINECOUNTER | Decline a counter proposal. Sent to an Attendee |
- | | by the Organizer. |
- +----------------+--------------------------------------------------+
-
-3.2.1. PUBLISH
-
- The "PUBLISH" method in a "VEVENT" calendar component is an
- unsolicited posting of an iCalendar object. Any CU may add published
- components to their calendar. The "Organizer" MUST be present in a
- published iCalendar component. "Attendees" MUST NOT be present. Its
- expected usage is for encapsulating an arbitrary event as an
- iCalendar object. The "Organizer" may subsequently update (with
- another "PUBLISH" method), add instances to (with an "ADD" method),
- or cancel (with a "CANCEL" method) a previously published "VEVENT"
- calendar component.
-
- This method type is an iCalendar object that conforms to the
- following property constraints:
-
-
-
-Daboo Standards Track [Page 18]
-
-RFC 5546 iTIP December 2009
-
-
- +----------------------------------------------+
- | Constraints for a METHOD:PUBLISH of a VEVENT |
- +----------------------------------------------+
-
- +--------------------+----------+-----------------------------------+
- | Component/Property | Presence | Comment |
- +--------------------+----------+-----------------------------------+
- | METHOD | 1 | MUST equal PUBLISH. |
- | | | |
- | VEVENT | 1+ | |
- | DTSTAMP | 1 | |
- | DTSTART | 1 | |
- | ORGANIZER | 1 | |
- | SUMMARY | 1 | Can be null. |
- | UID | 1 | |
- | RECURRENCE-ID | 0 or 1 | Only if referring to an instance |
- | | | of a recurring calendar |
- | | | component. Otherwise, it MUST |
- | | | NOT be present. |
- | SEQUENCE | 0 or 1 | MUST be present if value is |
- | | | greater than 0; MAY be present if |
- | | | 0. |
- | ATTACH | 0+ | |
- | CATEGORIES | 0+ | |
- | CLASS | 0 or 1 | |
- | COMMENT | 0+ | |
- | CONTACT | 0 or 1 | |
- | CREATED | 0 or 1 | |
- | DESCRIPTION | 0 or 1 | Can be null. |
- | DTEND | 0 or 1 | If present, DURATION MUST NOT be |
- | | | present. |
- | DURATION | 0 or 1 | If present, DTEND MUST NOT be |
- | | | present. |
- | EXDATE | 0+ | |
- | GEO | 0 or 1 | |
- | LAST-MODIFIED | 0 or 1 | |
- | LOCATION | 0 or 1 | |
- | PRIORITY | 0 or 1 | |
- | RDATE | 0+ | |
- | RELATED-TO | 0+ | |
- | RESOURCES | 0+ | |
- | RRULE | 0 or 1 | |
- | STATUS | 0 or 1 | MAY be one of |
- | | | TENTATIVE/CONFIRMED/CANCELLED. |
- | TRANSP | 0 or 1 | |
- | URL | 0 or 1 | |
- | IANA-PROPERTY | 0+ | |
- | X-PROPERTY | 0+ | |
-
-
-
-Daboo Standards Track [Page 19]
-
-RFC 5546 iTIP December 2009
-
-
- | ATTENDEE | 0 | |
- | REQUEST-STATUS | 0 | |
- | | | |
- | VALARM | 0+ | |
- | | | |
- | VFREEBUSY | 0 | |
- | | | |
- | VJOURNAL | 0 | |
- | | | |
- | VTODO | 0 | |
- | | | |
- | VTIMEZONE | 0+ | MUST be present if any date/time |
- | | | refers to a timezone. |
- | | | |
- | IANA-COMPONENT | 0+ | |
- | X-COMPONENT | 0+ | |
- +--------------------+----------+-----------------------------------+
-
-3.2.2. REQUEST
-
- The "REQUEST" method in a "VEVENT" component provides the following
- scheduling functions:
-
- o Invite "Attendees" to an event.
-
- o Reschedule an existing event.
-
- o Response to a "REFRESH" request.
-
- o Update the details of an existing event, without rescheduling it.
-
- o Update the status of "Attendees" of an existing event, without
- rescheduling it.
-
- o Reconfirm an existing event, without rescheduling it.
-
- o Forward a "VEVENT" to another uninvited CU.
-
- o For an existing "VEVENT" calendar component, delegate the role of
- "Attendee" to another CU.
-
- o For an existing "VEVENT" calendar component, change the role of
- "Organizer" to another CU.
-
- The "Organizer" originates the "REQUEST". The recipients of the
- "REQUEST" method are the CUs invited to the event, the "Attendees".
- "Attendees" use the "REPLY" method to convey attendance status to the
- "Organizer".
-
-
-
-Daboo Standards Track [Page 20]
-
-RFC 5546 iTIP December 2009
-
-
- The "UID" and "SEQUENCE" properties are used to distinguish the
- various uses of the "REQUEST" method. If the "UID" property value in
- the "REQUEST" is not found on the recipient's calendar, then the
- "REQUEST" is for a new "VEVENT" calendar component. If the "UID"
- property value is found on the recipient's calendar, then the
- "REQUEST" is for a rescheduling, an update, or a reconfirmation of
- the "VEVENT" calendar component.
-
- For the "REQUEST" method, multiple "VEVENT" components in a single
- iCalendar object are only permitted for components with the same
- "UID" property. That is, a series of recurring events may have
- instance-specific information. In this case, multiple "VEVENT"
- components are needed to express the entire series.
-
- This method type is an iCalendar object that conforms to the
- following property constraints:
-
- +----------------------------------------------+
- | Constraints for a METHOD:REQUEST of a VEVENT |
- +----------------------------------------------+
-
- +--------------------+----------+-----------------------------------+
- | Component/Property | Presence | Comment |
- +--------------------+----------+-----------------------------------+
- | METHOD | 1 | MUST be REQUEST. |
- | | | |
- | VEVENT | 1+ | All components MUST have the same |
- | | | UID. |
- | ATTENDEE | 1+ | |
- | DTSTAMP | 1 | |
- | DTSTART | 1 | |
- | ORGANIZER | 1 | |
- | SEQUENCE | 0 or 1 | MUST be present if value is |
- | | | greater than 0; MAY be present if |
- | | | 0. |
- | SUMMARY | 1 | Can be null. |
- | UID | 1 | |
- | ATTACH | 0+ | |
- | CATEGORIES | 0+ | |
- | CLASS | 0 or 1 | |
- | COMMENT | 0+ | |
- | CONTACT | 0+ | |
- | CREATED | 0 or 1 | |
- | DESCRIPTION | 0 or 1 | Can be null. |
- | DTEND | 0 or 1 | If present, DURATION MUST NOT be |
- | | | present. |
-
-
-
-
-
-Daboo Standards Track [Page 21]
-
-RFC 5546 iTIP December 2009
-
-
- | DURATION | 0 or 1 | If present, DTEND MUST NOT be |
- | | | present. |
- | EXDATE | 0+ | |
- | GEO | 0 or 1 | |
- | LAST-MODIFIED | 0 or 1 | |
- | LOCATION | 0 or 1 | |
- | PRIORITY | 0 or 1 | |
- | RDATE | 0+ | |
- | RECURRENCE-ID | 0 or 1 | Only if referring to an instance |
- | | | of a recurring calendar |
- | | | component. Otherwise, it MUST |
- | | | NOT be present. |
- | RELATED-TO | 0+ | |
- | REQUEST-STATUS | 0 | |
- | RESOURCES | 0+ | |
- | RRULE | 0 or 1 | |
- | STATUS | 0 or 1 | MAY be one of |
- | | | TENTATIVE/CONFIRMED. |
- | TRANSP | 0 or 1 | |
- | URL | 0 or 1 | |
- | IANA-PROPERTY | 0+ | |
- | X-PROPERTY | 0+ | |
- | | | |
- | VALARM | 0+ | |
- | | | |
- | VTIMEZONE | 0+ | MUST be present if any date/time |
- | | | refers to a timezone. |
- | | | |
- | IANA-COMPONENT | 0+ | |
- | X-COMPONENT | 0+ | |
- | | | |
- | VFREEBUSY | 0 | |
- | | | |
- | VJOURNAL | 0 | |
- | | | |
- | VTODO | 0 | |
- +--------------------+----------+-----------------------------------+
-
-3.2.2.1. Rescheduling an Event
-
- The "REQUEST" method may be used to reschedule an event. A
- rescheduled event involves a change to the existing event in terms of
- its time or recurrence intervals and possibly the location or
- description. If the recipient CUA of a "REQUEST" method finds that
- the "UID" property value already exists on the calendar but that the
- "SEQUENCE" (or "DTSTAMP") property value in the "REQUEST" method is
- greater than the value for the existing event, then the "REQUEST"
- method describes a rescheduling of the event.
-
-
-
-Daboo Standards Track [Page 22]
-
-RFC 5546 iTIP December 2009
-
-
-3.2.2.2. Updating or Reconfirmation of an Event
-
- The "REQUEST" method may be used to update or reconfirm an event. An
- update to an existing event does not involve changes to the time or
- recurrence intervals, and might not involve a change to the location
- or description for the event. If the recipient CUA of a "REQUEST"
- method finds that the "UID" property value already exists on the
- calendar and that the "SEQUENCE" property value in the "REQUEST" is
- the same as the value for the existing event, then the "REQUEST"
- method describes an update of the event details, but not a
- rescheduling of the event.
-
- The update "REQUEST" method is the appropriate response to a
- "REFRESH" method sent from an "Attendee" to the "Organizer" of an
- event.
-
- The "Organizer" of an event may also send unsolicited "REQUEST"
- methods. The unsolicited "REQUEST" methods may be used to update the
- details of the event without rescheduling it, to update the
- "PARTSTAT" parameter of "Attendees", or to reconfirm the event.
-
-3.2.2.3. Delegating an Event to Another CU
-
- Some calendar and scheduling systems allow "Attendees" to delegate
- their presence at an event to another "Calendar User". iTIP supports
- this concept using the following workflow. Any "Attendee" may
- delegate their right to participate in a calendar "VEVENT" to another
- CU. The implication is that the delegate participates in lieu of the
- original "Attendee", NOT in addition to the "Attendee". The
- delegator MUST notify the "Organizer" of this action using the steps
- outlined below. Implementations may support or restrict delegation
- as they see fit. For instance, some implementations may restrict a
- delegate from delegating a "REQUEST" to another CU.
-
- The "Delegator" of an event forwards the existing "REQUEST" to the
- "Delegate". The "REQUEST" method MUST include an "ATTENDEE" property
- with the calendar address of the "Delegate". The "Delegator" MUST
- also send a "REPLY" method to the "Organizer" with the "Delegator's"
- "ATTENDEE" property "PARTSTAT" parameter value set to "DELEGATED".
- In addition, the "DELEGATED-TO" parameter MUST be included with the
- calendar address of the "Delegate". Also, a new "ATTENDEE" property
- for the "Delegate" MUST be included and must specify the calendar
- user address set in the "DELEGATED-TO" parameter, as above.
-
- In response to the request, the "Delegate" MUST send a "REPLY" method
- to the "Organizer", and optionally to the "Delegator". The "REPLY"
- method SHOULD include the "ATTENDEE" property with the "DELEGATED-
- FROM" parameter value of the "Delegator's" calendar address.
-
-
-
-Daboo Standards Track [Page 23]
-
-RFC 5546 iTIP December 2009
-
-
- The "Delegator" may continue to receive updates to the event even
- though they will not be attending. This is accomplished by the
- "Delegator" setting their "role" attribute to "NON-PARTICIPANT" in
- the "REPLY" to the "Organizer".
-
-3.2.2.4. Changing the Organizer
-
- The situation may arise where the "Organizer" of a "VEVENT" is no
- longer able to perform the "Organizer" role and abdicates without
- passing on the "Organizer" role to someone else. When this occurs,
- the "Attendees" of the "VEVENT" may use out-of-band mechanisms to
- communicate the situation and agree upon a new "Organizer". The new
- "Organizer" should then send out a new "REQUEST" with a modified
- version of the "VEVENT" in which the "SEQUENCE" number has been
- incremented and the "ORGANIZER" property has been changed to the new
- "Organizer".
-
-3.2.2.5. Sending on Behalf of the Organizer
-
- There are a number of scenarios that support the need for a "Calendar
- User" to act on behalf of the "Organizer" without explicit role
- changing. This might be the case if the CU designated as "Organizer"
- is sick or unable to perform duties associated with that function.
- In these cases, iTIP supports the notion of one CU acting on behalf
- of another. Using the "SENT-BY" parameter, a "Calendar User" could
- send an updated "VEVENT" "REQUEST". In the case where one CU sends
- on behalf of another CU, the "Attendee" responses are still directed
- back towards the CU designated as "Organizer".
-
-3.2.2.6. Forwarding to an Uninvited CU
-
- An "Attendee" invited to a "VEVENT" calendar component may send the
- "VEVENT" calendar component to another new CU not previously
- associated with the "VEVENT" calendar component. The current
- "Attendee" invited to the "VEVENT" calendar component does this by
- forwarding the original "REQUEST" method to the new CU. The new CU
- can send a "REPLY" to the "Organizer" of the "VEVENT" calendar
- component. The reply contains an "ATTENDEE" property for the new CU.
-
- The "Organizer" ultimately decides whether or not the new CU becomes
- part of the event and is not obligated to do anything with a "REPLY"
- from a new (uninvited) CU. If the "Organizer" does not want the new
- CU to be part of the event, the new "ATTENDEE" property is not added
- to the "VEVENT" calendar component. The "Organizer" MAY send the CU
- a "CANCEL" message to indicate that they will not be added to the
- event. If the "Organizer" decides to add the new CU, the new
- "ATTENDEE" property is added to the "VEVENT" calendar component.
- Furthermore, the "Organizer" is free to change any "ATTENDEE"
-
-
-
-Daboo Standards Track [Page 24]
-
-RFC 5546 iTIP December 2009
-
-
- property parameter from the values supplied by the new CU to
- something the "Organizer" considers appropriate. The "Organizer"
- SHOULD send the new CU a "REQUEST" message to inform them that they
- have been added.
-
- When forwarding a "REQUEST" to another CU, the forwarding "Attendee"
- MUST NOT make changes to the original message.
-
-3.2.2.7. Updating Attendee Status
-
- The "Organizer" of an event may also request updated status from one
- or more "Attendees". The "Organizer" sends a "REQUEST" method to the
- "Attendee" and sets the "ATTENDEE;RSVP=TRUE" property parameter. The
- "SEQUENCE" property for the event is not changed from its previous
- value. A recipient will determine that the only change in the
- "REQUEST" is that their "RSVP" property parameter indicates a request
- for updated status. The recipient SHOULD respond with a "REPLY"
- method indicating their current status with respect to the "REQUEST".
-
-3.2.3. REPLY
-
- The "REPLY" method in a "VEVENT" calendar component is used to
- respond (e.g., accept or decline) to a "REQUEST" or to reply to a
- delegation "REQUEST". When used to provide a delegation response,
- the "Delegator" SHOULD include the calendar address of the "Delegate"
- on the "DELEGATED-TO" property parameter of the "Delegator's"
- "ATTENDEE" property. The "Delegate" SHOULD include the calendar
- address of the "Delegator" on the "DELEGATED-FROM" property parameter
- of the "Delegate's" "ATTENDEE" property.
-
- The "REPLY" method is also used when processing of a "REQUEST" fails.
- Depending on the value of the "REQUEST-STATUS" property, no
- scheduling action may have been performed.
-
- The "Organizer" of an event may receive the "REPLY" method from a CU
- not in the original "REQUEST". For example, a "REPLY" may be
- received from a "Delegate" to an event. In addition, the "REPLY"
- method may be received from an unknown CU (a "Party Crasher"). This
- uninvited "Attendee" may be accepted, or the "Organizer" may cancel
- the event for the uninvited "Attendee" by sending a "CANCEL" method
- to the uninvited "Attendee".
-
- An "Attendee" MAY include a message to the "Organizer" using the
- "COMMENT" property. For example, if the user indicates tentative
- acceptance and wants to let the "Organizer" know why, the reason can
- be expressed in the "COMMENT" property value.
-
-
-
-
-
-Daboo Standards Track [Page 25]
-
-RFC 5546 iTIP December 2009
-
-
- The "Organizer" may also receive a "REPLY" from one CU on behalf of
- another. Like the scenario enumerated above for the "Organizer",
- "Attendees" may have another CU respond on their behalf. This is
- done using the "SENT-BY" parameter.
-
- The optional properties listed in the table below (those listed as
- "0+" or "0 or 1") MUST NOT be changed from those of the original
- request. If property changes are desired, the "COUNTER" message must
- be used.
-
- This method type is an iCalendar object that conforms to the
- following property constraints:
-
- +--------------------------------------------+
- | Constraints for a METHOD:REPLY of a VEVENT |
- +--------------------------------------------+
-
- +--------------------+----------+-----------------------------------+
- | Component/Property | Presence | Comment |
- +--------------------+----------+-----------------------------------+
- | METHOD | 1 | MUST be REPLY. |
- | | | |
- | VEVENT | 1+ | All components MUST have the same |
- | | | UID. |
- | ATTENDEE | 1 | MUST be the address of the |
- | | | Attendee replying. |
- | DTSTAMP | 1 | |
- | ORGANIZER | 1 | |
- | RECURRENCE-ID | 0 or 1 | Only if referring to an instance |
- | | | of a recurring calendar |
- | | | component. Otherwise, it MUST |
- | | | NOT be present. |
- | UID | 1 | MUST be the UID of the original |
- | | | REQUEST. |
- | SEQUENCE | 0 or 1 | If non-zero, MUST be the sequence |
- | | | number of the original REQUEST. |
- | | | MAY be present if 0. |
- | ATTACH | 0+ | |
- | CATEGORIES | 0+ | |
- | CLASS | 0 or 1 | |
- | COMMENT | 0+ | |
- | CONTACT | 0+ | |
- | CREATED | 0 or 1 | |
- | DESCRIPTION | 0 or 1 | |
- | DTEND | 0 or 1 | If present, DURATION MUST NOT be |
- | | | present. |
- | DTSTART | 0 or 1 | |
-
-
-
-
-Daboo Standards Track [Page 26]
-
-RFC 5546 iTIP December 2009
-
-
- | DURATION | 0 or 1 | If present, DTEND MUST NOT be |
- | | | present. |
- | EXDATE | 0+ | |
- | GEO | 0 or 1 | |
- | LAST-MODIFIED | 0 or 1 | |
- | LOCATION | 0 or 1 | |
- | PRIORITY | 0 or 1 | |
- | RDATE | 0+ | |
- | RELATED-TO | 0+ | |
- | RESOURCES | 0+ | |
- | REQUEST-STATUS | 0+ | |
- | RRULE | 0 or 1 | |
- | STATUS | 0 or 1 | |
- | SUMMARY | 0 or 1 | |
- | TRANSP | 0 or 1 | |
- | URL | 0 or 1 | |
- | IANA-PROPERTY | 0+ | |
- | X-PROPERTY | 0+ | |
- | | | |
- | VALARM | 0 | |
- | | | |
- | VTIMEZONE | 0 or 1 | MUST be present if any date/time |
- | | | refers to a timezone. |
- | | | |
- | IANA-COMPONENT | 0+ | |
- | X-COMPONENT | 0+ | |
- | | | |
- | VFREEBUSY | 0 | |
- | | | |
- | VJOURNAL | 0 | |
- | | | |
- | VTODO | 0 | |
- +--------------------+----------+-----------------------------------+
-
-3.2.4. ADD
-
- The "ADD" method allows the "Organizer" to add one or more new
- instances to an existing "VEVENT" using a single iTIP message without
- having to send the entire "VEVENT" with all the existing instance
- data, as it would have to do if the "REQUEST" method were used.
-
- The "UID" must be that of the existing event. If the "UID" property
- value in the "ADD" is not found on the recipient's calendar, then the
- recipient SHOULD send a "REFRESH" to the "Organizer" in order to be
- updated with the latest version of the "VEVENT". If an "Attendee"
- implementation does not support the "ADD" method, it should respond
- with a "REQUEST-STATUS" value of 3.14 and ask for a "REFRESH".
-
-
-
-
-Daboo Standards Track [Page 27]
-
-RFC 5546 iTIP December 2009
-
-
- When handling an "ADD" message, the "Attendee" treats each component
- in the "ADD" message as if it were referenced via an "RDATE" in the
- main component.
-
- This method type is an iCalendar object that conforms to the
- following property constraints:
-
- +------------------------------------------+
- | Constraints for a METHOD:ADD of a VEVENT |
- +------------------------------------------+
-
- +--------------------+----------+-----------------------------------+
- | Component/Property | Presence | Comment |
- +--------------------+----------+-----------------------------------+
- | METHOD | 1 | MUST be ADD. |
- | | | |
- | VEVENT | 1 | |
- | DTSTAMP | 1 | |
- | DTSTART | 1 | |
- | ORGANIZER | 1 | |
- | SEQUENCE | 1 | MUST be greater than 0. |
- | SUMMARY | 1 | Can be null. |
- | UID | 1 | MUST match that of the original |
- | | | event. |
- | ATTACH | 0+ | |
- | ATTENDEE | 0+ | |
- | CATEGORIES | 0+ | |
- | CLASS | 0 or 1 | |
- | COMMENT | 0+ | |
- | CONTACT | 0+ | |
- | CREATED | 0 or 1 | |
- | DESCRIPTION | 0 or 1 | Can be null. |
- | DTEND | 0 or 1 | If present, DURATION MUST NOT be |
- | | | present. |
- | DURATION | 0 or 1 | If present, DTEND MUST NOT be |
- | | | present. |
- | GEO | 0 or 1 | |
- | LAST-MODIFIED | 0 or 1 | |
- | LOCATION | 0 or 1 | |
- | PRIORITY | 0 or 1 | |
- | RELATED-TO | 0+ | |
- | RESOURCES | 0+ | |
- | STATUS | 0 or 1 | MAY be one of |
- | | | TENTATIVE/CONFIRMED. |
- | TRANSP | 0 or 1 | |
- | URL | 0 or 1 | |
- | IANA-PROPERTY | 0+ | |
- | X-PROPERTY | 0+ | |
-
-
-
-Daboo Standards Track [Page 28]
-
-RFC 5546 iTIP December 2009
-
-
- | EXDATE | 0 | |
- | RECURRENCE-ID | 0 | |
- | REQUEST-STATUS | 0 | |
- | RDATE | 0 | |
- | RRULE | 0 | |
- | | | |
- | VALARM | 0+ | |
- | | | |
- | VTIMEZONE | 0+ | MUST be present if any date/time |
- | | | refers to a timezone. |
- | | | |
- | IANA-COMPONENT | 0+ | |
- | X-COMPONENT | 0+ | |
- | | | |
- | VFREEBUSY | 0 | |
- | | | |
- | VTODO | 0 | |
- | | | |
- | VJOURNAL | 0 | |
- +--------------------+----------+-----------------------------------+
-
-3.2.5. CANCEL
-
- The "CANCEL" method in a "VEVENT" calendar component is used to send
- a cancellation notice of an existing event request to the affected
- "Attendees". The message is sent by the "Organizer" of the event.
- For a recurring event, either the whole event or instances of an
- event may be cancelled. To cancel the complete range of a recurring
- event, the "UID" property value for the event MUST be specified and a
- "RECURRENCE-ID" MUST NOT be specified in the "CANCEL" method. In
- order to cancel an individual instance of the event, the
- "RECURRENCE-ID" property value for the event MUST be specified in the
- "CANCEL" method.
-
- There are two options for canceling a sequence of instances of a
- recurring "VEVENT" calendar component:
-
- a. The "RECURRENCE-ID" property for an instance in the sequence MUST
- be specified with the "RANGE" property parameter value of
- "THISANDFUTURE" to indicate cancellation of the specified
- "VEVENT" calendar component and all instances after.
-
- b. Individual recurrence instances may be cancelled by specifying
- multiple "VEVENT" components each with a "RECURRENCE-ID" property
- corresponding to one of the instances to be cancelled.
-
-
-
-
-
-
-Daboo Standards Track [Page 29]
-
-RFC 5546 iTIP December 2009
-
-
- The "Organizer" MUST send a "CANCEL" message to each "Attendee"
- affected by the cancellation. This can be done using a single
- "CANCEL" message for all "Attendees" or by using multiple messages
- with different subsets of the affected "Attendees" in each.
-
- When a "VEVENT" is cancelled, the "SEQUENCE" property value MUST be
- incremented as described in Section 2.1.4.
-
- This method type is an iCalendar object that conforms to the
- following property constraints:
-
- +---------------------------------------------+
- | Constraints for a METHOD:CANCEL of a VEVENT |
- +---------------------------------------------+
-
- +--------------------+----------+-----------------------------------+
- | Component/Property | Presence | Comment |
- +--------------------+----------+-----------------------------------+
- | METHOD | 1 | MUST be CANCEL. |
- | | | |
- | VEVENT | 1+ | All must have the same UID. |
- | ATTENDEE | 0+ | MUST include some or all |
- | | | Attendees being removed from the |
- | | | event. MUST include some or all |
- | | | Attendees if the entire event is |
- | | | cancelled. |
- | DTSTAMP | 1 | |
- | ORGANIZER | 1 | |
- | SEQUENCE | 1 | |
- | UID | 1 | MUST be the UID of the original |
- | | | REQUEST. |
- | COMMENT | 0+ | |
- | ATTACH | 0+ | |
- | CATEGORIES | 0+ | |
- | CLASS | 0 or 1 | |
- | CONTACT | 0+ | |
- | CREATED | 0 or 1 | |
- | DESCRIPTION | 0 or 1 | |
- | DTEND | 0 or 1 | If present, DURATION MUST NOT be |
- | | | present. |
- | DTSTART | 0 or 1 | |
- | DURATION | 0 or 1 | If present, DTEND MUST NOT be |
- | | | present. |
- | EXDATE | 0+ | |
- | GEO | 0 or 1 | |
- | LAST-MODIFIED | 0 or 1 | |
- | LOCATION | 0 or 1 | |
- | PRIORITY | 0 or 1 | |
-
-
-
-Daboo Standards Track [Page 30]
-
-RFC 5546 iTIP December 2009
-
-
- | RDATE | 0+ | |
- | RECURRENCE-ID | 0 or 1 | Only if referring to an instance |
- | | | of a recurring calendar |
- | | | component. Otherwise, it MUST |
- | | | NOT be present. |
- | RELATED-TO | 0+ | |
- | RESOURCES | 0+ | |
- | RRULE | 0 or 1 | |
- | STATUS | 0 or 1 | MUST be set to CANCELLED to |
- | | | cancel the entire event. If |
- | | | uninviting specific Attendees, |
- | | | then MUST NOT be included. |
- | SUMMARY | 0 or 1 | |
- | TRANSP | 0 or 1 | |
- | URL | 0 or 1 | |
- | IANA-PROPERTY | 0+ | |
- | X-PROPERTY | 0+ | |
- | REQUEST-STATUS | 0 | |
- | | | |
- | VALARM | 0 | |
- | | | |
- | VTIMEZONE | 0+ | MUST be present if any date/time |
- | | | refers to a timezone. |
- | | | |
- | IANA-COMPONENT | 0+ | |
- | X-COMPONENT | 0+ | |
- | | | |
- | VTODO | 0 | |
- | | | |
- | VJOURNAL | 0 | |
- | | | |
- | VFREEBUSY | 0 | |
- +--------------------+----------+-----------------------------------+
-
-3.2.6. REFRESH
-
- The "REFRESH" method in a "VEVENT" calendar component is used by
- "Attendees" of an existing event to request an updated description
- from the event "Organizer". The "REFRESH" method must specify the
- "UID" property of the event to update. A recurrence instance of an
- event may be requested by specifying the "RECURRENCE-ID" property
- corresponding to the associated event. The "Organizer" responds with
- the latest description and version of the event.
-
- This method type is an iCalendar object that conforms to the
- following property constraints:
-
-
-
-
-
-Daboo Standards Track [Page 31]
-
-RFC 5546 iTIP December 2009
-
-
- +----------------------------------------------+
- | Constraints for a METHOD:REFRESH of a VEVENT |
- +----------------------------------------------+
-
- +--------------------+----------+-----------------------------------+
- | Component/Property | Presence | Comment |
- +--------------------+----------+-----------------------------------+
- | METHOD | 1 | MUST be REFRESH. |
- | | | |
- | VEVENT | 1 | |
- | ATTENDEE | 1 | MUST be the address of requester. |
- | DTSTAMP | 1 | |
- | ORGANIZER | 1 | |
- | UID | 1 | MUST be the UID associated with |
- | | | original REQUEST. |
- | COMMENT | 0+ | |
- | RECURRENCE-ID | 0 or 1 | Only if referring to an instance |
- | | | of a recurring calendar |
- | | | component. Otherwise, it MUST |
- | | | NOT be present. |
- | IANA-PROPERTY | 0+ | |
- | X-PROPERTY | 0+ | |
- | ATTACH | 0 | |
- | CATEGORIES | 0 | |
- | CLASS | 0 | |
- | CONTACT | 0 | |
- | CREATED | 0 | |
- | DESCRIPTION | 0 | |
- | DTEND | 0 | |
- | DTSTART | 0 | |
- | DURATION | 0 | |
- | EXDATE | 0 | |
- | GEO | 0 | |
- | LAST-MODIFIED | 0 | |
- | LOCATION | 0 | |
- | PRIORITY | 0 | |
- | RDATE | 0 | |
- | RELATED-TO | 0 | |
- | REQUEST-STATUS | 0 | |
- | RESOURCES | 0 | |
- | RRULE | 0 | |
- | SEQUENCE | 0 | |
- | STATUS | 0 | |
- | SUMMARY | 0 | |
- | TRANSP | 0 | |
- | URL | 0 | |
- | | | |
-
-
-
-
-Daboo Standards Track [Page 32]
-
-RFC 5546 iTIP December 2009
-
-
- | VALARM | 0 | |
- | | | |
- | VTIMEZONE | 0+ | |
- | | | |
- | IANA-COMPONENT | 0+ | |
- | X-COMPONENT | 0+ | |
- | | | |
- | VTODO | 0 | |
- | | | |
- | VJOURNAL | 0 | |
- | | | |
- | VFREEBUSY | 0 | |
- +--------------------+----------+-----------------------------------+
-
-3.2.7. COUNTER
-
- The "COUNTER" method for a "VEVENT" calendar component is used by an
- "Attendee" of an existing event to submit to the "Organizer" a
- counter proposal to the event. The "Attendee" sends this message to
- the "Organizer" of the event.
-
- The counter proposal is an iCalendar object consisting of a "VEVENT"
- calendar component that provides the complete description of the
- alternate event.
-
- The "Organizer" rejects the counter proposal by sending the
- "Attendee" a "DECLINECOUNTER" method. The "Organizer" accepts the
- counter proposal by rescheduling the event as described in
- Section 3.2.2.1, "Rescheduling an Event". The "Organizer's" CUA
- SHOULD send a "REQUEST" message to all "Attendees" affected by any
- change triggered by an accepted "COUNTER".
-
- This method type is an iCalendar object that conforms to the
- following property constraints:
-
- +----------------------------------------------+
- | Constraints for a METHOD:COUNTER of a VEVENT |
- +----------------------------------------------+
-
- +--------------------+----------+-----------------------------------+
- | Component/Property | Presence | Comment |
- +--------------------+----------+-----------------------------------+
- | METHOD | 1 | MUST be COUNTER. |
- | | | |
- | VEVENT | 1 | |
- | DTSTAMP | 1 | |
- | DTSTART | 1 | |
-
-
-
-
-Daboo Standards Track [Page 33]
-
-RFC 5546 iTIP December 2009
-
-
- | ORGANIZER | 1 | MUST be the Organizer of the |
- | | | original event. |
- | SEQUENCE | 1 | MUST echo the original SEQUENCE |
- | | | number. MUST be present if |
- | | | non-zero. MAY be present if |
- | | | zero. |
- | SUMMARY | 1 | Can be null. |
- | UID | 1 | MUST be the UID associated with |
- | | | the REQUEST being countered. |
- | ATTACH | 0+ | |
- | ATTENDEE | 0+ | Can also be used to propose other |
- | | | Attendees. |
- | CATEGORIES | 0+ | |
- | CLASS | 0 or 1 | |
- | COMMENT | 0+ | |
- | CONTACT | 0+ | |
- | CREATED | 0 or 1 | |
- | DESCRIPTION | 0 or 1 | |
- | DTEND | 0 or 1 | If present, DURATION MUST NOT be |
- | | | present. |
- | DURATION | 0 or 1 | If present, DTEND MUST NOT be |
- | | | present. |
- | EXDATE | 0+ | |
- | GEO | 0 or 1 | |
- | LAST-MODIFIED | 0 or 1 | |
- | LOCATION | 0 or 1 | |
- | PRIORITY | 0 or 1 | |
- | RDATE | 0+ | |
- | RECURRENCE-ID | 0 or 1 | Only if referring to an instance |
- | | | of a recurring calendar |
- | | | component. Otherwise, it MUST |
- | | | NOT be present. |
- | RELATED-TO | 0+ | |
- | REQUEST-STATUS | 0+ | |
- | RESOURCES | 0+ | |
- | RRULE | 0 or 1 | |
- | STATUS | 0 or 1 | Value must be one of |
- | | | CONFIRMED/TENATIVE/CANCELLED. |
- | TRANSP | 0 or 1 | |
- | URL | 0 or 1 | |
- | IANA-PROPERTY | 0+ | |
- | X-PROPERTY | 0+ | |
- | | | |
- | VALARM | 0+ | |
- | | | |
- | VTIMEZONE | 0+ | MUST be present if any date/time |
- | | | refers to a timezone. |
- | | | |
-
-
-
-Daboo Standards Track [Page 34]
-
-RFC 5546 iTIP December 2009
-
-
- | IANA-COMPONENT | 0+ | |
- | X-COMPONENT | 0+ | |
- | | | |
- | VTODO | 0 | |
- | | | |
- | VJOURNAL | 0 | |
- | | | |
- | VFREEBUSY | 0 | |
- +--------------------+----------+-----------------------------------+
-
-3.2.8. DECLINECOUNTER
-
- The "DECLINECOUNTER" method in a "VEVENT" calendar component is used
- by the "Organizer" of an event to reject a counter proposal submitted
- by an "Attendee". The "Organizer" must send the "DECLINECOUNTER"
- message to the "Attendee" that sent the "COUNTER" method to the
- "Organizer".
-
- This method type is an iCalendar object that conforms to the
- following property constraints:
-
- +-----------------------------------------------------+
- | Constraints for a METHOD:DECLINECOUNTER of a VEVENT |
- +-----------------------------------------------------+
-
- +--------------------+----------+-----------------------------------+
- | Component/Property | Presence | Comment |
- +--------------------+----------+-----------------------------------+
- | METHOD | 1 | MUST be DECLINECOUNTER. |
- | | | |
- | VEVENT | 1+ | All components MUST have the same |
- | | | UID. |
- | ATTENDEE | 1+ | MUST for all Attendees. |
- | DTSTAMP | 1 | |
- | ORGANIZER | 1 | |
- | SEQUENCE | 1 | MUST echo the original SEQUENCE |
- | | | number. |
- | UID | 1 | MUST echo original UID. |
- | ATTACH | 0+ | |
- | CATEGORIES | 0+ | |
- | CLASS | 0 or 1 | |
- | COMMENT | 0+ | |
- | CONTACT | 0+ | |
- | CREATED | 0 or 1 | |
- | DESCRIPTION | 0 or 1 | Can be null. |
- | DTSTART | 0 or 1 | |
- | DTEND | 0 or 1 | If present, DURATION MUST NOT be |
- | | | present. |
-
-
-
-Daboo Standards Track [Page 35]
-
-RFC 5546 iTIP December 2009
-
-
- | DURATION | 0 or 1 | If present, DTEND MUST NOT be |
- | | | present. |
- | EXDATE | 0+ | |
- | GEO | 0 or 1 | |
- | LAST-MODIFIED | 0 or 1 | |
- | LOCATION | 0 or 1 | |
- | PRIORITY | 0 or 1 | |
- | RDATE | 0+ | |
- | RECURRENCE-ID | 0 or 1 | Only if referring to an instance |
- | | | of a recurring calendar |
- | | | component. Otherwise, it MUST |
- | | | NOT be present. |
- | RELATED-TO | 0+ | |
- | REQUEST-STATUS | 0+ | |
- | RESOURCES | 0+ | |
- | RRULE | 0 or 1 | |
- | STATUS | 0 or 1 | MAY be one of |
- | | | TENTATIVE/CONFIRMED. |
- | SUMMARY | 0 or 1 | Can be null. |
- | TRANSP | 0 or 1 | |
- | URL | 0 or 1 | |
- | IANA-PROPERTY | 0+ | |
- | X-PROPERTY | 0+ | |
- | | | |
- | | | |
- | VTIMEZONE | 0+ | MUST be present if any date/time |
- | | | refers to a timezone. |
- | | | |
- | IANA-COMPONENT | 0+ | |
- | X-COMPONENT | 0+ | |
- | | | |
- | VALARM | 0 | |
- | VFREEBUSY | 0 | |
- | | | |
- | VJOURNAL | 0 | |
- | | | |
- | VTODO | 0 | |
- +--------------------+----------+-----------------------------------+
-
-
-
-
-
-
-
-
-
-
-
-
-
-Daboo Standards Track [Page 36]
-
-RFC 5546 iTIP December 2009
-
-
-3.3. Methods for VFREEBUSY Components
-
- This section defines the property set for the methods that are
- applicable to the "VFREEBUSY" calendar component. Each of the
- methods is defined using a restriction table.
-
- This document only addresses the transfer of busy time information.
- Applications desiring free time information MUST infer this from
- available busy time information.
-
- The "FREEBUSY" property value MAY include a list of values, separated
- by the COMMA character (US-ASCII decimal 44). Alternately, multiple
- busy time periods MAY be specified with multiple instances of the
- "FREEBUSY" property. Both forms MUST be supported by implementations
- conforming to this document. Duplicate busy time periods SHOULD NOT
- be specified in an iCalendar object. However, two different busy
- time periods MAY overlap.
-
- "FREEBUSY" properties SHOULD be sorted such that their values are in
- ascending order, based on the start time and then the end time, with
- the earliest periods first. For example, today's busy time
- information should appear after yesterday's busy time information.
- And the busy time for this half-hour should appear after the busy
- time for earlier today. Busy time periods can also span a day
- boundary.
-
- The following summarizes the methods that are defined for the
- "VFREEBUSY" calendar component.
-
- +---------+-------------------------------------+
- | Method | Description |
- +---------+-------------------------------------+
- | PUBLISH | Publish unsolicited busy time data. |
- | | |
- | REQUEST | Request busy time data. |
- | | |
- | REPLY | Reply to a busy time request. |
- +---------+-------------------------------------+
-
-3.3.1. PUBLISH
-
- The "PUBLISH" method in a "VFREEBUSY" calendar component is used to
- publish busy time data. The method may be sent from one CU to any
- other. The purpose of the method is to provide a way to send
- unsolicited busy time data. That is, the busy time data is not being
- sent as a "REPLY" to the receipt of a "REQUEST" method.
-
-
-
-
-
-Daboo Standards Track [Page 37]
-
-RFC 5546 iTIP December 2009
-
-
- The "ORGANIZER" property MUST be specified in the busy time
- information. The value is the CU address of the originator of the
- busy time information.
-
- The busy time information within the iCalendar object MAY be grouped
- into more than one "VFREEBUSY" calendar component. This capability
- allows busy time periods to be grouped according to some common
- periodicity, such as a calendar week, month, or year. In this case,
- each "VFREEBUSY" calendar component MUST include the "ORGANIZER",
- "DTSTART", and "DTEND" properties in order to specify the source of
- the busy time information and the date and time interval over which
- the busy time information covers.
-
- This method type is an iCalendar object that conforms to the
- following property constraints:
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Daboo Standards Track [Page 38]
-
-RFC 5546 iTIP December 2009
-
-
- +-------------------------------------------------+
- | Constraints for a METHOD:PUBLISH of a VFREEBUSY |
- +-------------------------------------------------+
-
- +--------------------+----------+-----------------------------------+
- | Component/Property | Presence | Comment |
- +--------------------+----------+-----------------------------------+
- | METHOD | 1 | MUST be PUBLISH. |
- | | | |
- | VFREEBUSY | 1+ | |
- | DTSTAMP | 1 | |
- | DTSTART | 1 | DateTime values must be in UTC. |
- | DTEND | 1 | DateTime values must be in UTC. |
- | FREEBUSY | 0+ | MUST be BUSYTIME. Multiple |
- | | | instances are allowed. Multiple |
- | | | instances SHOULD be sorted in |
- | | | ascending order. |
- | ORGANIZER | 1 | MUST contain the address of |
- | | | originator of busy time data. |
- | UID | 1 | |
- | COMMENT | 0+ | |
- | CONTACT | 0 or 1 | |
- | IANA-PROPERTY | 0+ | |
- | X-PROPERTY | 0+ | |
- | URL | 0 or 1 | Specifies busy time URL. |
- | ATTENDEE | 0 | |
- | DURATION | 0 | |
- | REQUEST-STATUS | 0 | |
- | | | |
- | VALARM | 0 | |
- | | | |
- | IANA-COMPONENT | 0+ | |
- | X-COMPONENT | 0+ | |
- | | | |
- | VEVENT | 0 | |
- | | | |
- | VTODO | 0 | |
- | | | |
- | VJOURNAL | 0 | |
- | | | |
- | VTIMEZONE | 0 | |
- +--------------------+----------+-----------------------------------+
-
-
-
-
-
-
-
-
-
-Daboo Standards Track [Page 39]
-
-RFC 5546 iTIP December 2009
-
-
-3.3.2. REQUEST
-
- The "REQUEST" method in a "VFREEBUSY" calendar component is used to
- ask a "Calendar User" for their busy time information. The request
- may be for a busy time information bounded by a specific date and
- time interval.
-
- This message only permits requests for busy time information. The
- message is sent from a "Calendar User" requesting the busy time
- information of one or more intended recipients.
-
- If the originator of the "REQUEST" method is not authorized to make a
- busy time request on the recipient's calendar system, then an
- exception message SHOULD be returned in a "REPLY" method, but no busy
- time data need be returned.
-
- This method type is an iCalendar object that conforms to the
- following property constraints:
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Daboo Standards Track [Page 40]
-
-RFC 5546 iTIP December 2009
-
-
- +-------------------------------------------------+
- | Constraints for a METHOD:REQUEST of a VFREEBUSY |
- +-------------------------------------------------+
-
- +--------------------+----------+-----------------------------------+
- | Component/Property | Presence | Comment |
- +--------------------+----------+-----------------------------------+
- | METHOD | 1 | MUST be REQUEST. |
- | | | |
- | VFREEBUSY | 1 | |
- | ATTENDEE | 1+ | Contains the calendar user |
- | | | addresses of the "Calendar Users" |
- | | | whose freebusy is being |
- | | | requested. |
- | DTEND | 1 | DateTime values must be in UTC. |
- | DTSTAMP | 1 | |
- | DTSTART | 1 | DateTime values must be in UTC. |
- | ORGANIZER | 1 | MUST be the request originator's |
- | | | address. |
- | UID | 1 | |
- | COMMENT | 0+ | |
- | CONTACT | 0 or 1 | |
- | IANA-PROPERTY | 0+ | |
- | X-PROPERTY | 0+ | |
- | FREEBUSY | 0 | |
- | DURATION | 0 | |
- | REQUEST-STATUS | 0 | |
- | URL | 0 | |
- | | | |
- | VALARM | 0 | |
- | | | |
- | IANA-COMPONENT | 0+ | |
- | X-COMPONENT | 0+ | |
- | | | |
- | VEVENT | 0 | |
- | | | |
- | VTODO | 0 | |
- | | | |
- | VJOURNAL | 0 | |
- | | | |
- | VTIMEZONE | 0 | |
- +--------------------+----------+-----------------------------------+
-
-
-
-
-
-
-
-
-
-Daboo Standards Track [Page 41]
-
-RFC 5546 iTIP December 2009
-
-
-3.3.3. REPLY
-
- The "REPLY" method in a "VFREEBUSY" calendar component is used to
- respond to a busy time request. The method is sent by the recipient
- of a busy time request to the originator of the request.
-
- The "REPLY" method may also be used to respond to an unsuccessful
- "REQUEST" method. Depending on the "REQUEST-STATUS" value, no busy
- time information may be returned.
-
- This method type is an iCalendar object that conforms to the
- following property constraints:
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Daboo Standards Track [Page 42]
-
-RFC 5546 iTIP December 2009
-
-
- +-----------------------------------------------+
- | Constraints for a METHOD:REPLY of a VFREEBUSY |
- +-----------------------------------------------+
-
- +--------------------+----------+-----------------------------------+
- | Component/Property | Presence | Comment |
- +--------------------+----------+-----------------------------------+
- | METHOD | 1 | MUST be REPLY. |
- | | | |
- | VFREEBUSY | 1 | |
- | ATTENDEE | 1 | MUST be the address of the |
- | | | Attendee replying. |
- | DTSTAMP | 1 | |
- | DTEND | 1 | DateTime values must be in UTC. |
- | DTSTART | 1 | DateTime values must be in UTC. |
- | FREEBUSY | 0+ | MUST be BUSYTIME. Multiple |
- | | | instances are allowed. Multiple |
- | | | instances SHOULD be sorted in |
- | | | ascending order. |
- | ORGANIZER | 1 | MUST be the request originator's |
- | | | address. |
- | UID | 1 | MUST be the UID of the original |
- | | | REQUEST. |
- | COMMENT | 0+ | |
- | CONTACT | 0 or 1 | |
- | REQUEST-STATUS | 0+ | |
- | URL | 0 or 1 | Specifies busy time URL. |
- | IANA-PROPERTY | 0+ | |
- | X-PROPERTY | 0+ | |
- | DURATION | 0 | |
- | SEQUENCE | 0 | |
- | | | |
- | VALARM | 0 | |
- | | | |
- | IANA-COMPONENT | 0+ | |
- | X-COMPONENT | 0+ | |
- | | | |
- | VEVENT | 0 | |
- | | | |
- | VTODO | 0 | |
- | | | |
- | VJOURNAL | 0 | |
- | | | |
- | VTIMEZONE | 0 | |
- +--------------------+----------+-----------------------------------+
-
-
-
-
-
-
-Daboo Standards Track [Page 43]
-
-RFC 5546 iTIP December 2009
-
-
-3.4. Methods for VTODO Components
-
- This section defines the property set for the methods that are
- applicable to the "VTODO" calendar component. Each of the methods is
- defined using a restriction table that specifies the property
- constraints that define the particular method.
-
- The following summarizes the methods that are defined for the "VTODO"
- calendar component.
-
- +----------------+--------------------------------------------------+
- | Method | Description |
- +----------------+--------------------------------------------------+
- | PUBLISH | Post notification of a VTODO. Used primarily as |
- | | a method of advertising the existence of a |
- | | VTODO. |
- | | |
- | REQUEST | Assign a VTODO. This is an explicit assignment |
- | | to one or more Calendar Users. The REQUEST |
- | | method is also used to update or change an |
- | | existing VTODO. Clients that cannot handle |
- | | REQUEST MAY degrade the method to treat it as a |
- | | PUBLISH. |
- | | |
- | REPLY | Reply to a VTODO request. Attendees MAY set |
- | | PARTSTAT to ACCEPTED, DECLINED, TENTATIVE, |
- | | DELEGATED, PARTIAL, and COMPLETED. |
- | | |
- | ADD | Add one or more instances to an existing to-do. |
- | | |
- | CANCEL | Cancel one or more instances of an existing |
- | | to-do. |
- | | |
- | REFRESH | A request sent to a VTODO Organizer asking for |
- | | the latest version of a VTODO. |
- | | |
- | COUNTER | Counter a REQUEST with an alternative proposal. |
- | | |
- | DECLINECOUNTER | Decline a counter proposal by an Attendee. |
- +----------------+--------------------------------------------------+
-
-3.4.1. PUBLISH
-
- The "PUBLISH" method in a "VTODO" calendar component has no
- associated response. It is simply a posting of an iCalendar object
- that may be added to a calendar. It MUST have an "Organizer". It
- MUST NOT have "Attendees". Its expected usage is for encapsulating
- an arbitrary "VTODO" calendar component as an iCalendar object. The
-
-
-
-Daboo Standards Track [Page 44]
-
-RFC 5546 iTIP December 2009
-
-
- "Organizer" MAY subsequently update (with another "PUBLISH" method),
- add instances to (with an "ADD" method), or cancel (with a "CANCEL"
- method) a previously published "VTODO" calendar component.
-
- This method type is an iCalendar object that conforms to the
- following property constraints:
-
- +---------------------------------------------+
- | Constraints for a METHOD:PUBLISH of a VTODO |
- +---------------------------------------------+
-
- +--------------------+----------+-----------------------------------+
- | Component/Property | Presence | Comment |
- +--------------------+----------+-----------------------------------+
- | METHOD | 1 | MUST be PUBLISH. |
- | | | |
- | VTODO | 1+ | |
- | DTSTAMP | 1 | |
- | DTSTART | 1 | |
- | ORGANIZER | 1 | |
- | PRIORITY | 1 | |
- | SEQUENCE | 0 or 1 | MUST be present if value is |
- | | | greater than 0; MAY be present if |
- | | | 0. |
- | SUMMARY | 1 | Can be null. |
- | UID | 1 | |
- | ATTACH | 0+ | |
- | CATEGORIES | 0+ | |
- | CLASS | 0 or 1 | |
- | COMMENT | 0+ | |
- | COMPLETED | 0 or 1 | |
- | CONTACT | 0+ | |
- | CREATED | 0 or 1 | |
- | DESCRIPTION | 0 or 1 | Can be null. |
- | DUE | 0 or 1 | If present, DURATION MUST NOT be |
- | | | present. |
- | DURATION | 0 or 1 | If present, DUE MUST NOT be |
- | | | present. |
- | EXDATE | 0+ | |
- | GEO | 0 or 1 | |
- | LAST-MODIFIED | 0 or 1 | |
- | LOCATION | 0 or 1 | |
- | PERCENT-COMPLETE | 0 or 1 | |
- | RDATE | 0+ | |
- | RECURRENCE-ID | 0 or 1 | Only if referring to an instance |
- | | | of a recurring calendar |
- | | | component. Otherwise, it MUST |
- | | | NOT be present. |
-
-
-
-Daboo Standards Track [Page 45]
-
-RFC 5546 iTIP December 2009
-
-
- | RELATED-TO | 0+ | |
- | RESOURCES | 0+ | |
- | RRULE | 0 or 1 | |
- | STATUS | 0 or 1 | MAY be one of |
- | | | COMPLETED/NEEDS-ACTION/ |
- | | | IN-PROCESS/CANCELLED. |
- | URL | 0 or 1 | |
- | IANA-PROPERTY | 0+ | |
- | X-PROPERTY | 0+ | |
- | ATTENDEE | 0 | |
- | REQUEST-STATUS | 0 | |
- | | | |
- | VALARM | 0+ | |
- | | | |
- | VTIMEZONE | 0+ | MUST be present if any date/time |
- | | | refers to a timezone. |
- | | | |
- | IANA-COMPONENT | 0+ | |
- | X-COMPONENT | 0+ | |
- | | | |
- | VFREEBUSY | 0 | |
- | | | |
- | VEVENT | 0 | |
- | | | |
- | VJOURNAL | 0 | |
- +--------------------+----------+-----------------------------------+
-
-3.4.2. REQUEST
-
- The "REQUEST" method in a "VTODO" calendar component provides the
- following scheduling functions:
-
- o Assign a to-do to one or more "Calendar Users".
-
- o Reschedule an existing to-do.
-
- o Update the details of an existing to-do, without rescheduling it.
-
- o Update the completion status of "Attendees" of an existing to-do,
- without rescheduling it.
-
- o Reconfirm an existing to-do, without rescheduling it.
-
- o Delegate/reassign an existing to-do to another "Calendar User".
-
- The assigned "Calendar Users" are identified in the "VTODO" calendar
- component by individual "ATTENDEE;ROLE=REQ-PARTICIPANT" property
- value sequences.
-
-
-
-Daboo Standards Track [Page 46]
-
-RFC 5546 iTIP December 2009
-
-
- Typically, the originator of a "REQUEST" is the "Organizer" of the
- to-do, and the recipient of a "REQUEST" is the "Calendar User"
- assigned the to-do. The "Attendee" uses the "REPLY" method to convey
- their acceptance and completion status to the "Organizer" of the
- "REQUEST".
-
- The "UID", "SEQUENCE", and "DTSTAMP" properties are used to
- distinguish the various uses of the "REQUEST" method. If the "UID"
- property value in the "REQUEST" is not found on the recipient's
- calendar, then the "REQUEST" is for a new to-do. If the "UID"
- property value is found on the recipient's calendar, then the
- "REQUEST" is a rescheduling, an update, or a reconfirmation of the
- "VTODO" calendar object.
-
- If the "Organizer" of the "REQUEST" method is not authorized to make
- a to-do request on the "Attendee's" calendar system, then an
- exception is returned in the "REQUEST-STATUS" property of a
- subsequent "REPLY" method, but no scheduling action is performed.
-
- For the "REQUEST" method, multiple "VTODO" components in a single
- iCalendar object are only permitted for components with the same
- "UID" property. That is, a series of recurring events may have
- instance-specific information. In this case, multiple "VTODO"
- components are needed to express the entire series.
-
- This method type is an iCalendar object that conforms to the
- following property constraints:
-
- +---------------------------------------------+
- | Constraints for a METHOD:REQUEST of a VTODO |
- +---------------------------------------------+
-
- +--------------------+----------+-----------------------------------+
- | Component/Property | Presence | Comment |
- +--------------------+----------+-----------------------------------+
- | METHOD | 1 | MUST be REQUEST. |
- | | | |
- | VTODO | 1+ | All components must have the same |
- | | | UID. |
- | ATTENDEE | 1+ | |
- | DTSTAMP | 1 | |
- | DTSTART | 1 | |
- | ORGANIZER | 1 | |
- | PRIORITY | 1 | |
- | SEQUENCE | 0 or 1 | MUST be present if value is |
- | | | greater than 0; MAY be present if |
- | | | 0. |
- | SUMMARY | 1 | Can be null. |
-
-
-
-Daboo Standards Track [Page 47]
-
-RFC 5546 iTIP December 2009
-
-
- | UID | 1 | |
- | ATTACH | 0+ | |
- | CATEGORIES | 0+ | |
- | CLASS | 0 or 1 | |
- | COMMENT | 0+ | |
- | COMPLETED | 0 or 1 | |
- | CONTACT | 0+ | |
- | CREATED | 0 or 1 | |
- | DESCRIPTION | 0 or 1 | Can be null |
- | DUE | 0 or 1 | If present, DURATION MUST NOT be |
- | | | present. |
- | DURATION | 0 or 1 | If present, DUE MUST NOT be |
- | | | present. |
- | EXDATE | 0+ | |
- | GEO | 0 or 1 | |
- | LAST-MODIFIED | 0 or 1 | |
- | LOCATION | 0 or 1 | |
- | PERCENT-COMPLETE | 0 or 1 | |
- | RDATE | 0+ | |
- | RECURRENCE-ID | 0 or 1 | Only if referring to an instance |
- | | | of a recurring calendar |
- | | | component. Otherwise, it MUST |
- | | | NOT be present. |
- | RELATED-TO | 0+ | |
- | RESOURCES | 0+ | |
- | RRULE | 0 or 1 | |
- | STATUS | 0 or 1 | MAY be one of |
- | | | COMPLETED/NEEDS-ACTION/ |
- | | | IN-PROCESS. |
- | URL | 0 or 1 | |
- | IANA-PROPERTY | 0+ | |
- | X-PROPERTY | 0+ | |
- | REQUEST-STATUS | 0 | |
- | | | |
- | VALARM | 0+ | |
- | | | |
- | VTIMEZONE | 0+ | MUST be present if any date/time |
- | | | refers to a timezone. |
- | | | |
- | IANA-COMPONENT | 0+ | |
- | X-COMPONENT | 0+ | |
- | | | |
- | VEVENT | 0 | |
- | | | |
- | VFREEBUSY | 0 | |
- | | | |
- | VJOURNAL | 0 | |
- +--------------------+----------+-----------------------------------+
-
-
-
-Daboo Standards Track [Page 48]
-
-RFC 5546 iTIP December 2009
-
-
-3.4.2.1. REQUEST for Rescheduling a VTODO
-
- The "REQUEST" method may be used to reschedule a "VTODO" calendar
- component.
-
- Rescheduling a "VTODO" calendar component involves a change to the
- existing "VTODO" calendar component in terms of its start or due
- time, recurrence intervals, and possibly the description. If the
- recipient CUA of a "REQUEST" method finds that the "UID" property
- value already exists on the calendar but that the "SEQUENCE" property
- value in the "REQUEST" is greater than the value for the existing
- "VTODO", then the "REQUEST" method describes a rescheduling of the
- "VTODO" calendar component.
-
-3.4.2.2. REQUEST for Update or Reconfirmation of a VTODO
-
- The "REQUEST" method may be used to update or reconfirm a "VTODO"
- calendar component. Reconfirmation is merely an update of "Attendee"
- completion status or overall "VTODO" calendar component status.
-
- An update to an existing "VTODO" calendar component does not involve
- changes to the start or due time, recurrence intervals, or
- (generally) the description for the "VTODO" calendar component. If
- the recipient CUA of a "REQUEST" method finds that the "UID" property
- value already exists on the calendar and that the "SEQUENCE" property
- value in the "REQUEST" is the same as the value for the existing
- event, then the "REQUEST" method describes an update of the "VTODO"
- calendar component details, but not a rescheduling of the "VTODO"
- calendar component.
-
- The update "REQUEST" is the appropriate response to a "REFRESH"
- method sent from an "Attendee" to the "Organizer" of a "VTODO"
- calendar component.
-
- Unsolicited "REQUEST" methods MAY be sent by the "Organizer" of a
- "VTODO" calendar component. The unsolicited "REQUEST" methods are
- used to update the details of the "VTODO" (without rescheduling it or
- updating the completion status of "Attendees") or the "VTODO"
- calendar component itself (i.e., reconfirm the "VTODO").
-
-3.4.2.3. REQUEST for Delegating a VTODO
-
- The "REQUEST" method is also used to delegate or reassign ownership
- of a "VTODO" calendar component to another "Calendar User". For
- example, it may be used to delegate an "Attendee's" role (i.e.,
- "chair" or "participant") for a "VTODO" calendar component. The
- "REQUEST" method is sent by one of the "Attendees" of an existing
- "VTODO" calendar component to some other individual.
-
-
-
-Daboo Standards Track [Page 49]
-
-RFC 5546 iTIP December 2009
-
-
- For the purposes of this description, the "Attendee" delegating the
- "VTODO" calendar component is referred to as the "Delegator". The
- "Attendee" receiving the delegation request is referred to as the
- "Delegate".
-
- The "Delegator" of a "VTODO" calendar component MUST forward the
- existing "REQUEST" method for a "VTODO" calendar component to the
- "Delegate". The "VTODO" calendar component description MUST include
- the "Delegator's" up-to-date "VTODO" calendar component definition.
- The "REQUEST" method MUST also include an "ATTENDEE" property with
- the calendar address of the "Delegate". The "Delegator" MUST also
- send a "REPLY" method back to the "Organizer" with the "Delegator's"
- "Attendee" property "PARTSTAT" parameter value set to "DELEGATED".
- In addition, the "DELEGATED-TO" parameter MUST be included with the
- calendar address of the "Delegate". A response to the delegation
- "REQUEST" is sent from the "Delegate" to the "Organizer", and
- optionally to the "Delegator". The "REPLY" method from the
- "Delegate" SHOULD include the "ATTENDEE" property with their calendar
- address and the "DELEGATED-FROM" parameter with the value of the
- "Delegator's" calendar address.
-
- The delegation "REQUEST" method MUST assign a value for the "RSVP"
- property parameter associated with the "Delegator's" "Attendee"
- property to that of the "Delegate's" "ATTENDEE" property. For
- example, if the "Delegator's" "ATTENDEE" property specifies
- "RSVP=TRUE", then the "Delegate's" "ATTENDEE" property MUST specify
- "RSVP=TRUE".
-
-3.4.2.4. REQUEST Forwarded to an Uninvited Calendar User
-
- An "Attendee" assigned a "VTODO" calendar component may send the
- "VTODO" calendar component to another new CU not previously
- associated with the "VTODO" calendar component. The current
- "Attendee" assigned the "VTODO" calendar component does this by
- forwarding the original "REQUEST" method to the new CU. The new CU
- can send a "REPLY" to the "Organizer" of the "VTODO" calendar
- component. The reply contains an "ATTENDEE" property for the new CU.
-
- The "Organizer" ultimately decides whether or not the new CU becomes
- part of the to-do and is not obligated to do anything with a "REPLY"
- from a new (uninvited) CU. If the "Organizer" does not want the new
- CU to be part of the to-do, the new "ATTENDEE" property is not added
- to the "VTODO" calendar component. The "Organizer" MAY send the CU a
- "CANCEL" message to indicate that they will not be added to the to-
- do. If the "Organizer" decides to add the new CU, the new "ATTENDEE"
- property is added to the "VTODO" calendar component. Furthermore,
- the "Organizer" is free to change any "ATTENDEE" property parameter
- from the values supplied by the new CU to something the "Organizer"
-
-
-
-Daboo Standards Track [Page 50]
-
-RFC 5546 iTIP December 2009
-
-
- considers appropriate. The "Organizer" SHOULD send the new
- "Attendee" a "REQUEST" message to inform them that they have been
- added.
-
- When forwarding a "REQUEST" to another CU, the forwarding "Attendee"
- MUST NOT make changes to the original message.
-
-3.4.2.5. REQUEST Updated Attendee Status
-
- An "Organizer" of a "VTODO" may request an updated status from one or
- more "Attendees". The "Organizer" sends a "REQUEST" method to the
- "Attendee" with the "ATTENDEE;RSVP=TRUE" property sequence. The
- "SEQUENCE" property for the "VTODO" is not changed from its previous
- value. A recipient determines that the only change in the "REQUEST"
- is that their "RSVP" property parameter indicates a request for an
- updated status. The recipient SHOULD respond with a "REPLY" method
- indicating their current status with respect to the "REQUEST".
-
-3.4.3. REPLY
-
- The "REPLY" method in a "VTODO" calendar component is used to respond
- (e.g., accept or decline) to a request or to reply to a delegation
- request. It is also used by an "Attendee" to update their completion
- status. When used to provide a delegation response, the "Delegator"
- MUST include the calendar address of the "Delegate" in the
- "DELEGATED-TO" parameter of the "Delegator's" "ATTENDEE" property.
- The "Delegate" MUST include the calendar address of the "Delegator"
- on the "DELEGATED-FROM" parameter of the "Delegate's" "ATTENDEE"
- property.
-
- The "REPLY" method MAY also be used to respond to an unsuccessful
- "VTODO" calendar component "REQUEST" method. Depending on the
- "REQUEST-STATUS" value, no scheduling action may have been performed.
-
- The "Organizer" of a "VTODO" calendar component MAY receive a "REPLY"
- method from a "Calendar User" not in the original "REQUEST". For
- example, a "REPLY" method MAY be received from a "Delegate" of a
- "VTODO" calendar component. In addition, the "REPLY" method MAY be
- received from an unknown "Calendar User" who has been forwarded the
- "REQUEST" by an original "Attendee" of the "VTODO" calendar
- component. This uninvited "Attendee" MAY be accepted or the
- "Organizer" MAY cancel the "VTODO" calendar component for the
- uninvited "Attendee" by sending them a "CANCEL" method.
-
- This method type is an iCalendar object that conforms to the
- following property constraints:
-
-
-
-
-
-Daboo Standards Track [Page 51]
-
-RFC 5546 iTIP December 2009
-
-
- +-------------------------------------------+
- | Constraints for a METHOD:REPLY of a VTODO |
- +-------------------------------------------+
-
- +--------------------+----------+-----------------------------------+
- | Component/Property | Presence | Comment |
- +--------------------+----------+-----------------------------------+
- | METHOD | 1 | MUST be REPLY. |
- | | | |
- | VTODO | 1+ | All components MUST have the same |
- | | | UID. |
- | ATTENDEE | 1 | MUST be the address of the |
- | | | Attendee replying. |
- | DTSTAMP | 1 | |
- | ORGANIZER | 1 | |
- | REQUEST-STATUS | 0+ | |
- | UID | 1 | MUST be the UID of the original |
- | | | REQUEST. |
- | ATTACH | 0+ | |
- | CATEGORIES | 0+ | |
- | CLASS | 0 or 1 | |
- | COMMENT | 0+ | |
- | COMPLETED | 0 or 1 | |
- | CONTACT | 0+ | |
- | CREATED | 0 or 1 | |
- | DESCRIPTION | 0 or 1 | |
- | DTSTART | 0 or 1 | |
- | DUE | 0 or 1 | If present, DURATION MUST NOT be |
- | | | present. |
- | DURATION | 0 or 1 | If present, DUE MUST NOT be |
- | | | present. |
- | EXDATE | 0+ | |
- | GEO | 0 or 1 | |
- | LAST-MODIFIED | 0 or 1 | |
- | LOCATION | 0 or 1 | |
- | PERCENT-COMPLETE | 0 or 1 | |
- | PRIORITY | 0 or 1 | |
- | RDATE | 0+ | |
- | RELATED-TO | 0+ | |
- | RESOURCES | 0+ | |
- | RRULE | 0 or 1 | |
- | RECURRENCE-ID | 0 or 1 | Only if referring to an instance |
- | | | of a recurring calendar |
- | | | component. Otherwise, it MUST |
- | | | NOT be present. |
- | SEQUENCE | 0 or 1 | MUST be the sequence number of |
- | | | the original REQUEST if greater |
- | | | than 0. MAY be present if 0. |
-
-
-
-Daboo Standards Track [Page 52]
-
-RFC 5546 iTIP December 2009
-
-
- | STATUS | 0 or 1 | |
- | SUMMARY | 0 or 1 | Can be null. |
- | URL | 0 or 1 | |
- | IANA-PROPERTY | 0+ | |
- | X-PROPERTY | 0+ | |
- | | | |
- | VALARM | 0 | |
- | | | |
- | VTIMEZONE | 0 or 1 | MUST be present if any date/time |
- | | | refers to a timezone. |
- | | | |
- | IANA-COMPONENT | 0+ | |
- | X-COMPONENT | 0+ | |
- | | | |
- | VEVENT | 0 | |
- | | | |
- | VFREEBUSY | 0 | |
- +--------------------+----------+-----------------------------------+
-
-3.4.4. ADD
-
- The "ADD" method allows the "Organizer" to add one or more new
- instances to an existing "VTODO" using a single iTIP message without
- having to send the entire "VTODO" with all the existing instance
- data, as it would have to do if the "REQUEST" method were used.
-
- The "UID" must be that of the existing to-do. If the "UID" property
- value in the "ADD" is not found on the recipient's calendar, then the
- recipient SHOULD send a "REFRESH" to the "Organizer" in order to be
- updated with the latest version of the "VTODO". If an "Attendee"
- implementation does not support the "ADD" method, it should respond
- with a "REQUEST-STATUS" value of 3.14 and ask for a "REFRESH".
-
- When handling an "ADD" message, the "Attendee" treats each component
- in the "ADD" message as if it were referenced via an "RDATE" in the
- main component.
-
- The "SEQUENCE" property value is incremented since the sequence of
- to-dos has changed.
-
- This method type is an iCalendar object that conforms to the
- following property constraints:
-
-
-
-
-
-
-
-
-
-Daboo Standards Track [Page 53]
-
-RFC 5546 iTIP December 2009
-
-
- +-----------------------------------------+
- | Constraints for a METHOD:ADD of a VTODO |
- +-----------------------------------------+
-
- +--------------------+----------+-----------------------------------+
- | Component/Property | Presence | Comment |
- +--------------------+----------+-----------------------------------+
- | METHOD | 1 | MUST be ADD. |
- | | | |
- | VTODO | 1 | |
- | DTSTAMP | 1 | |
- | ORGANIZER | 1 | |
- | PRIORITY | 1 | |
- | SEQUENCE | 1 | MUST be greater than 0. |
- | SUMMARY | 1 | Can be null. |
- | UID | 1 | MUST match that of the original |
- | | | to-do. |
- | ATTACH | 0+ | |
- | ATTENDEE | 0+ | |
- | CATEGORIES | 0+ | |
- | CLASS | 0 or 1 | |
- | COMMENT | 0+ | |
- | COMPLETED | 0 or 1 | |
- | CONTACT | 0+ | |
- | CREATED | 0 or 1 | |
- | DESCRIPTION | 0 or 1 | Can be null. |
- | DTSTART | 0 or 1 | |
- | DUE | 0 or 1 | If present, DURATION MUST NOT be |
- | | | present. |
- | DURATION | 0 or 1 | If present, DUE MUST NOT be |
- | | | present. |
- | GEO | 0 or 1 | |
- | LAST-MODIFIED | 0 or 1 | |
- | LOCATION | 0 or 1 | |
- | PERCENT-COMPLETE | 0 or 1 | |
- | RELATED-TO | 0+ | |
- | RESOURCES | 0+ | |
- | STATUS | 0 or 1 | MAY be one of |
- | | | COMPLETED/NEEDS-ACTION/ |
- | | | IN-PROCESS. |
- | URL | 0 or 1 | |
- | IANA-PROPERTY | 0+ | |
- | X-PROPERTY | 0+ | |
- | EXDATE | 0 | |
- | RECURRENCE-ID | 0 | |
- | REQUEST-STATUS | 0 | |
- | RDATE | 0 | |
- | RRULE | 0 | |
-
-
-
-Daboo Standards Track [Page 54]
-
-RFC 5546 iTIP December 2009
-
-
- | | | |
- | VALARM | 0+ | |
- | | | |
- | VTIMEZONE | 0+ | MUST be present if any date/time |
- | | | refers to a timezone. |
- | | | |
- | IANA-COMPONENT | 0+ | |
- | X-COMPONENT | 0+ | |
- | | | |
- | VEVENT | 0 | |
- | | | |
- | VJOURNAL | 0 | |
- | | | |
- | VFREEBUSY | 0 | |
- +--------------------+----------+-----------------------------------+
-
-3.4.5. CANCEL
-
- The "CANCEL" method in a "VTODO" calendar component is used to send a
- cancellation notice of an existing "VTODO" calendar request to the
- affected "Attendees". The message is sent by the "Organizer" of a
- "VTODO" calendar component to the "Attendees" of the "VTODO" calendar
- component. For a recurring "VTODO" calendar component, either the
- whole "VTODO" calendar component or instances of a "VTODO" calendar
- component may be cancelled. To cancel the complete range of a
- recurring "VTODO" calendar component, the "UID" property value for
- the "VTODO" calendar component MUST be specified and a "RECURRENCE-
- ID" MUST NOT be specified in the "CANCEL" method. In order to cancel
- an individual instance of a recurring "VTODO" calendar component, the
- "RECURRENCE-ID" property value for the "VTODO" calendar component
- MUST be specified in the "CANCEL" method.
-
- There are two options for canceling a sequence of instances of a
- recurring "VTODO" calendar component:
-
- a. The "RECURRENCE-ID" property for an instance in the sequence MUST
- be specified with the "RANGE" property parameter value of
- "THISANDFUTURE" to indicate cancellation of the specified "VTODO"
- calendar component and all instances after.
-
- b. Individual recurrence instances may be cancelled by specifying
- multiple "VTODO" components each with a "RECURRENCE-ID" property
- corresponding to one of the instances to be cancelled.
-
- The "Organizer" MUST send a "CANCEL" message to each "Attendee"
- affected by the cancellation. This can be done by using either a
- single "CANCEL" message for all "Attendees" or multiple messages with
- different subsets of the affected "Attendees" in each.
-
-
-
-Daboo Standards Track [Page 55]
-
-RFC 5546 iTIP December 2009
-
-
- When a "VTODO" is cancelled, the "SEQUENCE" property value MUST be
- incremented as described in Section 2.1.4.
-
- This method type is an iCalendar object that conforms to the
- following property constraints:
-
- +--------------------------------------------+
- | Constraints for a METHOD:CANCEL of a VTODO |
- +--------------------------------------------+
-
- +--------------------+----------+-----------------------------------+
- | Component/Property | Presence | Comment |
- +--------------------+----------+-----------------------------------+
- | METHOD | 1 | MUST be CANCEL. |
- | | | |
- | VTODO | 1+ | |
- | ATTENDEE | 0+ | MUST include some or all |
- | | | Attendees being removed from the |
- | | | to-do. MUST include some or all |
- | | | Attendees if the entire to-do is |
- | | | cancelled. |
- | UID | 1 | MUST echo original UID. |
- | DTSTAMP | 1 | |
- | ORGANIZER | 1 | |
- | SEQUENCE | 1 | |
- | ATTACH | 0+ | |
- | CATEGORIES | 0+ | |
- | CLASS | 0 or 1 | |
- | COMMENT | 0+ | |
- | COMPLETED | 0 or 1 | |
- | CONTACT | 0+ | |
- | CREATED | 0 or 1 | |
- | DESCRIPTION | 0 or 1 | |
- | DTSTART | 0 or 1 | |
- | DUE | 0 or 1 | If present, DURATION MUST NOT be |
- | | | present. |
- | DURATION | 0 or 1 | If present, DUE MUST NOT be |
- | | | present. |
- | EXDATE | 0+ | |
- | GEO | 0 or 1 | |
- | LAST-MODIFIED | 0 or 1 | |
- | LOCATION | 0 or 1 | |
- | PERCENT-COMPLETE | 0 or 1 | |
- | RDATE | 0+ | |
-
-
-
-
-
-
-
-Daboo Standards Track [Page 56]
-
-RFC 5546 iTIP December 2009
-
-
- | RECURRENCE-ID | 0 or 1 | Only if referring to an instance |
- | | | of a recurring calendar |
- | | | component. Otherwise, it MUST |
- | | | NOT be present. |
- | RELATED-TO | 0+ | |
- | RESOURCES | 0+ | |
- | RRULE | 0 or 1 | |
- | PRIORITY | 0 or 1 | |
- | STATUS | 0 or 1 | MUST be set to CANCELLED to |
- | | | cancel the entire VTODO. If |
- | | | removing specific Attendees, then |
- | | | MUST NOT be included. |
- | URL | 0 or 1 | |
- | IANA-PROPERTY | 0+ | |
- | X-PROPERTY | 0+ | |
- | REQUEST-STATUS | 0 | |
- | | | |
- | VALARM | 0 | |
- | | | |
- | VTIMEZONE | 0 or 1 | MUST be present if any date/time |
- | | | refers to a timezone. |
- | | | |
- | IANA-COMPONENT | 0+ | |
- | X-COMPONENT | 0+ | |
- | | | |
- | VEVENT | 0 | |
- | | | |
- | VFREEBUSY | 0 | |
- +--------------------+----------+-----------------------------------+
-
-3.4.6. REFRESH
-
- The "REFRESH" method in a "VTODO" calendar component is used by
- "Attendees" of an existing "VTODO" calendar component to request an
- updated description from the "Organizer" of the "VTODO" calendar
- component. The "Organizer" of the "VTODO" calendar component MAY use
- this method to request an updated status from the "Attendees". The
- "REFRESH" method MUST specify the "UID" property corresponding to the
- "VTODO" calendar component needing update.
-
- A refresh of a recurrence instance of a "VTODO" calendar component
- may be requested by specifying the "RECURRENCE-ID" property
- corresponding to the associated "VTODO" calendar component. The
- "Organizer" responds with the latest description and rendition of the
- "VTODO" calendar component. In most cases, this will be a "REQUEST"
- unless the "VTODO" has been cancelled, in which case the "Organizer"
- MUST send a "CANCEL". This method is intended to facilitate machine
- processing of requests for updates to a "VTODO" calendar component.
-
-
-
-Daboo Standards Track [Page 57]
-
-RFC 5546 iTIP December 2009
-
-
- This method type is an iCalendar object that conforms to the
- following property constraints:
-
- +---------------------------------------------+
- | Constraints for a METHOD:REFRESH of a VTODO |
- +---------------------------------------------+
-
- +--------------------+----------+-----------------------------------+
- | Component/Property | Presence | Comment |
- +--------------------+----------+-----------------------------------+
- | METHOD | 1 | MUST be REFRESH. |
- | | | |
- | VTODO | 1 | |
- | ATTENDEE | 1 | |
- | DTSTAMP | 1 | |
- | UID | 1 | MUST echo original UID. |
- | RECURRENCE-ID | 0 or 1 | Only if referring to an instance |
- | | | of a recurring calendar |
- | | | component. Otherwise, it MUST |
- | | | NOT be present. |
- | IANA-PROPERTY | 0+ | |
- | X-PROPERTY | 0+ | |
- | ATTACH | 0 | |
- | CATEGORIES | 0 | |
- | CLASS | 0 | |
- | COMMENT | 0 | |
- | COMPLETED | 0 | |
- | CONTACT | 0 | |
- | CREATED | 0 | |
- | DESCRIPTION | 0 | |
- | DTSTART | 0 | |
- | DUE | 0 | |
- | DURATION | 0 | |
- | EXDATE | 0 | |
- | GEO | 0 | |
- | LAST-MODIFIED | 0 | |
- | LOCATION | 0 | |
- | ORGANIZER | 0 | |
- | PERCENT-COMPLETE | 0 | |
- | PRIORITY | 0 | |
- | RDATE | 0 | |
- | RELATED-TO | 0 | |
- | REQUEST-STATUS | 0 | |
- | RESOURCES | 0 | |
- | RRULE | 0 | |
- | SEQUENCE | 0 | |
- | STATUS | 0 | |
- | URL | 0 | |
-
-
-
-Daboo Standards Track [Page 58]
-
-RFC 5546 iTIP December 2009
-
-
- | | | |
- | VALARM | 0 | |
- | | | |
- | VTIMEZONE | 0+ | |
- | | | |
- | IANA-COMPONENT | 0+ | |
- | X-COMPONENT | 0+ | |
- | | | |
- | VEVENT | 0 | |
- | | | |
- | VFREEBUSY | 0 | |
- +--------------------+----------+-----------------------------------+
-
-3.4.7. COUNTER
-
- The "COUNTER" method in a "VTODO" calendar component is used by an
- "Attendee" of an existing "VTODO" calendar component to submit to the
- "Organizer" a counter proposal for the "VTODO" calendar component.
-
- The counter proposal is an iCalendar object consisting of a "VTODO"
- calendar component that provides the complete description of the
- alternate "VTODO" calendar component.
-
- The "Organizer" rejects the counter proposal by sending the
- "Attendee" a "DECLINECOUNTER" method. The "Organizer" accepts the
- counter proposal by rescheduling the to-do as described in
- Section 3.4.2.1, "REQUEST for Rescheduling a To-Do". The
- "Organizer's" CUA SHOULD send a "REQUEST" message to all "Attendees"
- affected by any change triggered by an accepted "COUNTER".
-
- This method type is an iCalendar object that conforms to the
- following property constraints:
-
- +---------------------------------------------+
- | Constraints for a METHOD:COUNTER of a VTODO |
- +---------------------------------------------+
-
- +--------------------+----------+-----------------------------------+
- | Component/Property | Presence | Comment |
- +--------------------+----------+-----------------------------------+
- | METHOD | 1 | MUST be COUNTER. |
- | | | |
- | VTODO | 1 | |
- | ATTENDEE | 1+ | |
- | DTSTAMP | 1 | |
- | ORGANIZER | 1 | |
- | PRIORITY | 1 | |
- | SUMMARY | 1 | Can be null. |
-
-
-
-Daboo Standards Track [Page 59]
-
-RFC 5546 iTIP December 2009
-
-
- | UID | 1 | |
- | ATTACH | 0+ | |
- | CATEGORIES | 0+ | |
- | CLASS | 0 or 1 | |
- | COMMENT | 0+ | |
- | COMPLETED | 0 or 1 | |
- | CONTACT | 0+ | |
- | CREATED | 0 or 1 | |
- | DESCRIPTION | 0 or 1 | Can be null. |
- | DTSTART | 0 or 1 | |
- | DUE | 0 or 1 | If present, DURATION MUST NOT be |
- | | | present. |
- | DURATION | 0 or 1 | If present, DUE MUST NOT be |
- | | | present. |
- | EXDATE | 0+ | |
- | GEO | 0 or 1 | |
- | LAST-MODIFIED | 0 or 1 | |
- | LOCATION | 0 or 1 | |
- | PERCENT-COMPLETE | 0 or 1 | |
- | RDATE | 0+ | |
- | RECURRENCE-ID | 0 or 1 | Only if referring to an instance |
- | | | of a recurring calendar |
- | | | component. Otherwise, it MUST |
- | | | NOT be present. |
- | RELATED-TO | 0+ | |
- | REQUEST-STATUS | 0+ | |
- | RESOURCES | 0+ | |
- | RRULE | 0 or 1 | |
- | SEQUENCE | 0 or 1 | MUST echo the original SEQUENCE |
- | | | number. MUST be present if |
- | | | non-zero. MAY be present if |
- | | | zero. |
- | STATUS | 0 or 1 | MAY be one of |
- | | | COMPLETED/NEEDS-ACTION/ |
- | | | IN-PROCESS/CANCELLED. |
- | URL | 0 or 1 | |
- | IANA-PROPERTY | 0+ | |
- | X-PROPERTY | 0+ | |
- | | | |
- | VALARM | 0+ | |
- | | | |
- | VTIMEZONE | 0 or 1 | MUST be present if any date/time |
- | | | refers to a timezone. |
- | | | |
- | IANA-COMPONENT | 0+ | |
- | X-COMPONENT | 0+ | |
- | | | |
-
-
-
-
-Daboo Standards Track [Page 60]
-
-RFC 5546 iTIP December 2009
-
-
- | VEVENT | 0 | |
- | | | |
- | VFREEBUSY | 0 | |
- +--------------------+----------+-----------------------------------+
-
-3.4.8. DECLINECOUNTER
-
- The "DECLINECOUNTER" method in a "VTODO" calendar component is used
- by an "Organizer" of the "VTODO" calendar component to reject a
- counter proposal offered by one of the "Attendees". The "Organizer"
- sends the message to the "Attendee" that sent the "COUNTER" method to
- the "Organizer".
-
- This method type is an iCalendar object that conforms to the
- following property constraints:
-
- +----------------------------------------------------+
- | Constraints for a METHOD:DECLINECOUNTER of a VTODO |
- +----------------------------------------------------+
-
- +--------------------+----------+-----------------------------------+
- | Component/Property | Presence | Comment |
- +--------------------+----------+-----------------------------------+
- | METHOD | 1 | MUST be DECLINECOUNTER. |
- | | | |
- | VTODO | 1 | |
- | ATTENDEE | 1+ | MUST for all ATTENDEEs. |
- | DTSTAMP | 1 | |
- | ORGANIZER | 1 | |
- | SEQUENCE | 1 | MUST echo the original SEQUENCE |
- | | | number. |
- | UID | 1 | MUST echo original UID. |
- | ATTACH | 0+ | |
- | CATEGORIES | 0+ | |
- | CLASS | 0 or 1 | |
- | COMMENT | 0+ | |
- | COMPLETED | 0 or 1 | |
- | CONTACT | 0+ | |
- | CREATED | 0 or 1 | |
- | DESCRIPTION | 0 or 1 | |
- | DTSTART | 0 or 1 | |
- | DUE | 0 or 1 | If present, DURATION MUST NOT be |
- | | | present. |
- | DURATION | 0 or 1 | If present, DUE MUST NOT be |
- | | | present. |
- | EXDATE | 0+ | |
- | GEO | 0 or 1 | |
- | LAST-MODIFIED | 0 or 1 | |
-
-
-
-Daboo Standards Track [Page 61]
-
-RFC 5546 iTIP December 2009
-
-
- | LOCATION | 0 or 1 | |
- | PERCENT-COMPLETE | 0 or 1 | |
- | PRIORITY | 0 or 1 | |
- | RDATE | 0+ | |
- | RECURRENCE-ID | 0 or 1 | Only if referring to an instance |
- | | | of a recurring calendar |
- | | | component. Otherwise, it MUST |
- | | | NOT be present. |
- | RELATED-TO | 0+ | |
- | REQUEST-STATUS | 0+ | |
- | RESOURCES | 0+ | |
- | RRULE | 0 or 1 | |
- | STATUS | 0 or 1 | MAY be one of |
- | | | COMPLETED/NEEDS-ACTION/ |
- | | | IN-PROCESS. |
- | URL | 0 or 1 | |
- | IANA-PROPERTY | 0+ | |
- | X-PROPERTY | 0+ | |
- | | | |
- | VALARM | 0 | |
- | | | |
- | VTIMEZONE | 0+ | MUST be present if any date/time |
- | | | refers to a timezone. |
- | | | |
- | IANA-COMPONENT | 0+ | |
- | X-COMPONENT | 0+ | |
- | | | |
- | VEVENT | 0 | |
- | | | |
- | VFREEBUSY | 0 | |
- +--------------------+----------+-----------------------------------+
-
-3.5. Methods for VJOURNAL Components
-
- This section defines the property set for the methods that are
- applicable to the "VJOURNAL" calendar component.
-
- The following summarizes the methods that are defined for the
- "VJOURNAL" calendar component.
-
-
-
-
-
-
-
-
-
-
-
-
-Daboo Standards Track [Page 62]
-
-RFC 5546 iTIP December 2009
-
-
- +---------+---------------------------------------------------------+
- | Method | Description |
- +---------+---------------------------------------------------------+
- | PUBLISH | Post a journal entry. Used primarily as a method of |
- | | advertising the existence of a journal entry. |
- | | |
- | ADD | Add one or more instances to an existing journal entry. |
- | | |
- | CANCEL | Cancel one or more instances of an existing journal |
- | | entry. |
- +---------+---------------------------------------------------------+
-
-3.5.1. PUBLISH
-
- The "PUBLISH" method in a "VJOURNAL" calendar component has no
- associated response. It is simply a posting of an iCalendar object
- that may be added to a calendar. It MUST have an "Organizer". It
- MUST NOT have "Attendees". The expected usage is for encapsulating
- an arbitrary journal entry as an iCalendar object. The "Organizer"
- MAY subsequently update (with another "PUBLISH" method) or cancel
- (with a "CANCEL" method) a previously published journal entry.
-
- This method type is an iCalendar object that conforms to the
- following property constraints:
-
- +------------------------------------------------+
- | Constraints for a METHOD:PUBLISH of a VJOURNAL |
- +------------------------------------------------+
-
- +--------------------+----------+-----------------------------------+
- | Component/Property | Presence | Comment |
- +--------------------+----------+-----------------------------------+
- | METHOD | 1 | MUST be PUBLISH. |
- | | | |
- | VJOURNAL | 1+ | |
- | DESCRIPTION | 1 | Can be null. |
- | DTSTAMP | 1 | |
- | DTSTART | 1 | |
- | ORGANIZER | 1 | |
- | UID | 1 | |
- | ATTACH | 0+ | |
- | CATEGORIES | 0+ | |
- | CLASS | 0 or 1 | |
- | COMMENT | 0+ | |
- | CONTACT | 0+ | |
- | CREATED | 0 or 1 | |
- | EXDATE | 0+ | |
- | LAST-MODIFIED | 0 or 1 | |
-
-
-
-Daboo Standards Track [Page 63]
-
-RFC 5546 iTIP December 2009
-
-
- | RDATE | 0+ | |
- | RECURRENCE-ID | 0 or 1 | Only if referring to an instance |
- | | | of a recurring calendar |
- | | | component. Otherwise, it MUST |
- | | | NOT be present. |
- | RELATED-TO | 0+ | |
- | RRULE | 0 or 1 | |
- | SEQUENCE | 0 or 1 | MUST be present if non-zero. MAY |
- | | | be present if zero. |
- | STATUS | 0 or 1 | MAY be one of |
- | | | DRAFT/FINAL/CANCELLED. |
- | SUMMARY | 0 or 1 | Can be null. |
- | URL | 0 or 1 | |
- | IANA-PROPERTY | 0+ | |
- | X-PROPERTY | 0+ | |
- | ATTENDEE | 0 | |
- | REQUEST-STATUS | 0 | |
- | | | |
- | VALARM | 0+ | |
- | | | |
- | VTIMEZONE | 0+ | MUST be present if any date/time |
- | | | refers to a timezone. |
- | | | |
- | IANA-COMPONENT | 0+ | |
- | X-COMPONENT | 0+ | |
- | | | |
- | VEVENT | 0 | |
- | | | |
- | VFREEBUSY | 0 | |
- | | | |
- | VTODO | 0 | |
- +--------------------+----------+-----------------------------------+
-
-3.5.2. ADD
-
- The "ADD" method allows the "Organizer" to add one or more new
- instances to an existing "VJOURNAL" using a single iTIP message
- without having to send the entire "VJOURNAL" with all the existing
- instance data, as it would have to do if the "REQUEST" method were
- used.
-
- The "UID" must be that of the existing journal entry. If the "UID"
- property value in the "ADD" is not found on the recipient's calendar,
- then the recipient MAY treat the "ADD" as a "PUBLISH".
-
- When handling an "ADD" message, the "Attendee" treats each component
- in the "ADD" message as if it were referenced via an "RDATE" in the
- main component. There is no response to the "Organizer".
-
-
-
-Daboo Standards Track [Page 64]
-
-RFC 5546 iTIP December 2009
-
-
- This method type is an iCalendar object that conforms to the
- following property constraints:
-
- +--------------------------------------------+
- | Constraints for a METHOD:ADD of a VJOURNAL |
- +--------------------------------------------+
-
- +--------------------+----------+-----------------------------------+
- | Component/Property | Presence | Comment |
- +--------------------+----------+-----------------------------------+
- | METHOD | 1 | MUST be ADD. |
- | | | |
- | VJOURNAL | 1 | |
- | DESCRIPTION | 1 | Can be null. |
- | DTSTAMP | 1 | |
- | DTSTART | 1 | |
- | ORGANIZER | 1 | |
- | SEQUENCE | 1 | MUST be greater than 0. |
- | UID | 1 | MUST match that of the original |
- | | | journal. |
- | ATTACH | 0+ | |
- | CATEGORIES | 0+ | |
- | CLASS | 0 or 1 | |
- | COMMENT | 0+ | |
- | CONTACT | 0+ | |
- | CREATED | 0 or 1 | |
- | LAST-MODIFIED | 0 or 1 | |
- | RELATED-TO | 0+ | |
- | STATUS | 0 or 1 | MAY be one of |
- | | | DRAFT/FINAL/CANCELLED. |
- | SUMMARY | 0 or 1 | Can be null. |
- | URL | 0 or 1 | |
- | IANA-PROPERTY | 0+ | |
- | X-PROPERTY | 0+ | |
- | ATTENDEE | 0 | |
- | EXDATE | 0 | |
- | RECURRENCE-ID | 0 | |
- | REQUEST-STATUS | 0 | |
- | RDATE | 0 | |
- | RRULE | 0 | |
- | | | |
- | VALARM | 0+ | |
- | | | |
- | VTIMEZONE | 0 or 1 | MUST be present if any date/time |
- | | | refers to a timezone. |
- | | | |
- | IANA-COMPONENT | 0+ | |
- | X-COMPONENT | 0+ | |
-
-
-
-Daboo Standards Track [Page 65]
-
-RFC 5546 iTIP December 2009
-
-
- | | | |
- | VEVENT | 0 | |
- | | | |
- | VFREEBUSY | 0 | |
- | | | |
- | VTODO | 0 | |
- +--------------------+----------+-----------------------------------+
-
-3.5.3. CANCEL
-
- The "CANCEL" method in a "VJOURNAL" calendar component is used to
- send a cancellation notice of an existing journal entry. The message
- is sent by the "Organizer" of a journal entry. For a recurring
- journal entry, either the whole journal entry or instances of a
- journal entry may be cancelled. To cancel the complete range of a
- recurring journal entry, the "UID" property value for the journal
- entry MUST be specified and a "RECURRENCE-ID" property MUST NOT be
- specified in the "CANCEL" method. In order to cancel an individual
- instance of the journal entry, the "RECURRENCE-ID" property value for
- the journal entry MUST be specified in the "CANCEL" method.
-
- There are two options for canceling a sequence of instances of a
- recurring "VJOURNAL" calendar component:
-
- a. The "RECURRENCE-ID" property for an instance in the sequence MUST
- be specified with the "RANGE" property parameter value of
- "THISANDFUTURE" to indicate cancellation of the specified
- "VJOURNAL" calendar component and all instances after.
-
- b. Individual recurrence instances may be cancelled by specifying
- multiple "VJOURNAL" components each with a "RECURRENCE-ID"
- property corresponding to one of the instances to be cancelled.
-
- When a "VJOURNAL" is cancelled, the "SEQUENCE" property value MUST be
- incremented as described in Section 2.1.4.
-
- This method type is an iCalendar object that conforms to the
- following property constraints:
-
-
-
-
-
-
-
-
-
-
-
-
-
-Daboo Standards Track [Page 66]
-
-RFC 5546 iTIP December 2009
-
-
- +-----------------------------------------------+
- | Constraints for a METHOD:CANCEL of a VJOURNAL |
- +-----------------------------------------------+
-
- +--------------------+----------+-----------------------------------+
- | Component/Property | Presence | Comment |
- +--------------------+----------+-----------------------------------+
- | METHOD | 1 | MUST be CANCEL. |
- | | | |
- | VJOURNAL | 1+ | All MUST have the same UID. |
- | DTSTAMP | 1 | |
- | ORGANIZER | 1 | |
- | SEQUENCE | 1 | |
- | UID | 1 | MUST be the UID of the original |
- | | | REQUEST. |
- | ATTACH | 0+ | |
- | ATTENDEE | 0 | |
- | CATEGORIES | 0+ | |
- | CLASS | 0 or 1 | |
- | COMMENT | 0+ | |
- | CONTACT | 0+ | |
- | CREATED | 0 or 1 | |
- | DESCRIPTION | 0 or 1 | |
- | DTSTART | 0 or 1 | |
- | EXDATE | 0+ | |
- | LAST-MODIFIED | 0 or 1 | |
- | RDATE | 0+ | |
- | RECURRENCE-ID | 0 or 1 | Only if referring to an instance |
- | | | of a recurring calendar |
- | | | component. Otherwise, it MUST |
- | | | NOT be present. |
- | RELATED-TO | 0+ | |
- | RRULE | 0 or 1 | |
- | STATUS | 0 or 1 | MAY be present; MUST be CANCELLED |
- | | | if present. |
- | SUMMARY | 0 or 1 | |
- | URL | 0 or 1 | |
- | IANA-PROPERTY | 0+ | |
- | X-PROPERTY | 0+ | |
- | REQUEST-STATUS | 0 | |
- | | | |
- | VALARM | 0 | |
- | | | |
- | VTIMEZONE | 0+ | MUST be present if any date/time |
- | | | refers to a timezone. |
- | | | |
- | IANA-COMPONENT | 0+ | |
- | X-COMPONENT | 0+ | |
-
-
-
-Daboo Standards Track [Page 67]
-
-RFC 5546 iTIP December 2009
-
-
- | | | |
- | VEVENT | 0 | |
- | | | |
- | VFREEBUSY | 0 | |
- | | | |
- | VTODO | 0 | |
- +--------------------+----------+-----------------------------------+
-
-3.6. Status Replies
-
- The "REQUEST-STATUS" property is used to convey status information
- about a "REPLY", "COUNTER", or "DECLINECOUNTER" iTIP message. The
- codes listed in the table below SHOULD be used. If the "REQUEST-
- STATUS" property is not present in one of these iTIP messages, then a
- status code of "2.0" (success) MUST be assumed.
-
- This specification adds a new IANA registry for "REQUEST-STATUS"
- property values, as defined in Section 7, which includes a new
- registration template for defining the specific components of the
- "REQUEST-STATUS" property value. Additional codes MAY be used,
- provided the process described in Section 8.2.1 of [RFC5545] is used
- to register them.
-
- This specification allows for multiple "REQUEST-STATUS" properties to
- be returned in iCalendar components in the appropriate iTIP messages.
- When multiple "REQUEST-STATUS" properties are present, the following
- restrictions apply:
-
- 1. Within any one component, the "top-level" numeric value of the
- "short return status code" MUST be the same for all "REQUEST-
- STATUS" properties, i.e., there cannot be a mixture of, e.g.,
- 2.xx and 5.xx codes within a single component.
-
- 2. Across all components in the iTIP message, the following applies:
-
- A. If any one component would have a 5.xx code, then either all
- components MUST have a code in that range or "REQUEST-STATUS"
- MUST NOT be present in the other components if a 5.xx code is
- not appropriate for those components.
-
- B. Otherwise, if any one component would have a 3.xx code, then
- either all components MUST have a code in that range or
- "REQUEST-STATUS" MUST NOT be present in the other components
- if a 3.xx code is not appropriate for those components.
-
- C. 2.xx and 4.xx codes can be used in different components,
- provided that each component follows the restriction in (1)
- above.
-
-
-
-Daboo Standards Track [Page 68]
-
-RFC 5546 iTIP December 2009
-
-
- The following "REQUEST-STATUS" codes are defined (any "Offending
- Data" MAY be specified in the "REQUEST-STATUS" value as the extdata
- field):
-
-3.6.1. Status Code 2.0
-
- Status Code: 2.0
-
- Status Description: Success.
-
- Status Exception Data: None.
-
- Description: iTIP operation succeeded.
-
-3.6.2. Status Code 2.1
-
- Status Code: 2.1
-
- Status Description: Success, but fallback taken on one or more
- property values.
-
- Status Exception Data: Property name and value MAY be specified.
-
- Description: iTIP operation succeeded with fallback on one or more
- property values.
-
-3.6.3. Status Code 2.2
-
- Status Code: 2.2
-
- Status Description: Success; invalid property ignored.
-
- Status Exception Data: Property name MAY be specified.
-
- Description: iTIP operation succeeded but a property was ignored.
-
-3.6.4. Status Code 2.3
-
- Status Code: 2.3
-
- Status Description: Success; invalid property parameter ignored.
-
- Status Exception Data: Property parameter name and value MAY be
- specified.
-
- Description: iTIP operation succeeded but a property parameter was
- ignored because it was invalid.
-
-
-
-
-Daboo Standards Track [Page 69]
-
-RFC 5546 iTIP December 2009
-
-
-3.6.5. Status Code 2.4
-
- Status Code: 2.4
-
- Status Description: Success; unknown, non-standard property ignored.
-
- Status Exception Data: Non-standard property name MAY be specified.
-
- Description: iTIP operation succeeded but a property parameter was
- ignored because it was unknown.
-
-3.6.6. Status Code 2.5
-
- Status Code: 2.5
-
- Status Description: Success; unknown, non-standard property value
- ignored.
-
- Status Exception Data: Property and non-standard value MAY be
- specified.
-
- Description: iTIP operation succeeded but a property was ignored
- because its value was unknown.
-
-3.6.7. Status Code 2.6
-
- Status Code: 2.6
-
- Status Description: Success; invalid calendar component ignored.
-
- Status Exception Data: Calendar component sentinel (e.g., BEGIN:
- ALARM) MAY be specified.
-
- Description: iTIP operation succeeded but a component was ignored
- because it was invalid.
-
-3.6.8. Status Code 2.7
-
- Status Code: 2.7
-
- Status Description: Success; request forwarded to Calendar User.
-
- Status Exception Data: Original and forwarded calendar user
- addresses MAY be specified.
-
- Description: iTIP operation succeeded, and the request was forwarded
- to another Calendar User.
-
-
-
-
-Daboo Standards Track [Page 70]
-
-RFC 5546 iTIP December 2009
-
-
-3.6.9. Status Code 2.8
-
- Status Code: 2.8
-
- Status Description: Success; repeating event ignored. Scheduled as
- a single component.
-
- Status Exception Data: RRULE or RDATE property name and value MAY be
- specified.
-
- Description: iTIP operation succeeded but a repeating event was
- truncated to a single instance.
-
-3.6.10. Status Code 2.9
-
- Status Code: 2.9
-
- Status Description: Success; truncated end date time to date
- boundary.
-
- Status Exception Data: DTEND property value MAY be specified.
-
- Description: iTIP operation succeeded but the end time was truncated
- to a date boundary.
-
-3.6.11. Status Code 2.10
-
- Status Code: 2.10
-
- Status Description: Success; repeating VTODO ignored. Scheduled as
- a single VTODO.
-
- Status Exception Data: RRULE or RDATE property name and value MAY be
- specified.
-
- Description: iTIP operation succeeded but a repeating to-do was
- truncated to a single instance.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Daboo Standards Track [Page 71]
-
-RFC 5546 iTIP December 2009
-
-
-3.6.12. Status Code 2.11
-
- Status Code: 2.11
-
- Status Description: Success; unbounded RRULE clipped at some finite
- number of instances.
-
- Status Exception Data: RRULE property name and value MAY be
- specified. Number of instances MAY also be specified.
-
- Description: iTIP operation succeeded but an unbounded repeating
- object was clipped to a finite number of instances.
-
-3.6.13. Status Code 3.0
-
- Status Code: 3.0
-
- Status Description: Invalid property name.
-
- Status Exception Data: Property name MAY be specified.
-
- Description: iTIP operation failed because of an invalid property
- name.
-
-3.6.14. Status Code 3.1
-
- Status Code: 3.1
-
- Status Description: Invalid property value.
-
- Status Exception Data: Property name and value MAY be specified.
-
- Description: iTIP operation failed because of an invalid property
- value.
-
-3.6.15. Status Code 3.2
-
- Status Code: 3.2
-
- Status Description: Invalid property parameter.
-
- Status Exception Data: Property parameter name and value MAY be
- specified.
-
- Description: iTIP operation failed because of an invalid property
- parameter.
-
-
-
-
-
-Daboo Standards Track [Page 72]
-
-RFC 5546 iTIP December 2009
-
-
-3.6.16. Status Code 3.3
-
- Status Code: 3.3
-
- Status Description: Invalid property parameter value.
-
- Status Exception Data: Property parameter name and value MAY be
- specified.
-
- Description: iTIP operation failed because of an invalid property
- parameter value.
-
-3.6.17. Status Code 3.4
-
- Status Code: 3.4
-
- Status Description: Invalid calendar component sequence.
-
- Status Exception Data: Calendar component sentinel MAY be specified
- (e.g., BEGIN:VTIMEZONE).
-
- Description: iTIP operation failed because of an invalid component.
-
-3.6.18. Status Code 3.5
-
- Status Code: 3.5
-
- Status Description: Invalid date or time.
-
- Status Exception Data: Date/time value(s) MAY be specified.
-
- Description: iTIP operation failed because of an invalid date or
- time property.
-
-3.6.19. Status Code 3.6
-
- Status Code: 3.6
-
- Status Description: Invalid rule.
-
- Status Exception Data: RRULE property value MAY be specified.
-
- Description: iTIP operation failed because of an invalid rule
- property.
-
-
-
-
-
-
-
-Daboo Standards Track [Page 73]
-
-RFC 5546 iTIP December 2009
-
-
-3.6.20. Status Code 3.7
-
- Status Code: 3.7
-
- Status Description: Invalid Calendar User.
-
- Status Exception Data: ATTENDEE property value MAY be specified.
-
- Description: iTIP operation failed because of an invalid ATTENDEE
- property.
-
-3.6.21. Status Code 3.8
-
- Status Code: 3.8
-
- Status Description: No authority.
-
- Status Exception Data: METHOD and ATTENDEE property values MAY be
- specified.
-
- Description: iTIP operation failed because an Attendee does not have
- suitable privileges for the operation.
-
-3.6.22. Status Code 3.9
-
- Status Code: 3.9
-
- Status Description: Unsupported version.
-
- Status Exception Data: VERSION property name and value MAY be
- specified.
-
- Description: iTIP operation failed because the calendar data version
- is not supported.
-
-3.6.23. Status Code 3.10
-
- Status Code: 3.10
-
- Status Description: Request entity too large.
-
- Status Exception Data: None.
-
- Description: iTIP operation failed because the calendar data was too
- large.
-
-
-
-
-
-
-Daboo Standards Track [Page 74]
-
-RFC 5546 iTIP December 2009
-
-
-3.6.24. Status Code 3.11
-
- Status Code: 3.11
-
- Status Description: Required component or property missing.
-
- Status Exception Data: Component or property name MAY be specified.
-
- Description: iTIP operation failed because the calendar data did not
- contain a required property or component.
-
-3.6.25. Status Code 3.12
-
- Status Code: 3.12
-
- Status Description: Unknown component or property found.
-
- Status Exception Data: Component or property name MAY be specified.
-
- Description: iTIP operation failed because the calendar data
- contained an unknown property or component.
-
-3.6.26. Status Code 3.13
-
- Status Code: 3.13
-
- Status Description: Unsupported component or property found.
-
- Status Exception Data: Component or property name MAY be specified.
-
- Description: iTIP operation failed because the calendar data
- contained an unsupported property or component.
-
-3.6.27. Status Code 3.14
-
- Status Code: 3.14
-
- Status Description: Unsupported capability.
-
- Status Exception Data: METHOD or action MAY be specified.
-
- Description: iTIP operation failed because the operation is not
- supported.
-
-
-
-
-
-
-
-
-Daboo Standards Track [Page 75]
-
-RFC 5546 iTIP December 2009
-
-
-3.6.28. Status Code 4.0
-
- Status Code: 4.0
-
- Status Description: Event conflict. Date/time is busy.
-
- Status Exception Data: DTSTART and DTEND property names and values
- MAY be specified.
-
- Description: iTIP operation failed because the event overlaps the
- date and time of another event.
-
-3.6.29. Status Code 5.0
-
- Status Code: 5.0
-
- Status Description: Request not supported.
-
- Status Exception Data: METHOD property value MAY be specified.
-
- Description: iTIP operation failed because the operation is not
- supported.
-
-3.6.30. Status Code 5.1
-
- Status Code: 5.1
-
- Status Description: Service unavailable.
-
- Status Exception Data: ATTENDEE property value MAY be specified.
-
- Description: iTIP operation failed because scheduling is not active.
-
-3.6.31. Status Code 5.2
-
- Status Code: 5.2
-
- Status Description: Invalid calendar service.
-
- Status Exception Data: ATTENDEE property value MAY be specified.
-
- Description: iTIP operation failed because there is no scheduling
- capability.
-
-
-
-
-
-
-
-
-Daboo Standards Track [Page 76]
-
-RFC 5546 iTIP December 2009
-
-
-3.6.32. Status Code 5.3
-
- Status Code: 5.3
-
- Status Description: No scheduling support for user.
-
- Status Exception Data: ATTENDEE property value MAY be specified.
-
- Description: iTIP operation failed because scheduling is not enabled
- for an Attendee.
-
-3.7. Implementation Considerations
-
-3.7.1. Working With Recurrence Instances
-
- iCalendar includes a recurrence grammar to represent recurring
- events. The benefit of such a grammar is the ability to represent a
- number of events in a single object. However, while this simplifies
- creation of a recurring event, meeting instances still need to be
- referenced. For instance, an "Attendee" may decline the third
- instance of a recurring Friday event. Similarly, the "Organizer" may
- change the time or location to a single instance of the recurring
- event.
-
- Since implementations may elect to store recurring events as either a
- single event object or a collection of discrete, related event
- objects, the protocol is designed so that each recurring instance may
- be both referenced and versioned. Hence, implementations that choose
- to maintain per-instance properties (such as "ATTENDEE" property
- "PARTSTAT" parameter) may do so. However, the protocol does not
- require per-instance recognition unless the instance itself must be
- renegotiated.
-
- The scenarios for recurrence instance referencing are listed below.
- For purposes of simplification, a change to an event refers to a
- "trigger property." That is, a property that has a substantive
- effect on the meeting itself, such as start time, location, due date
- (for "VTODO" calendar components), and possibly description.
-
- "Organizer"-initiated actions:
-
- o deletes or changes a single instance of a recurring event
-
- o makes changes that affect all future instances
-
- o makes changes that affect all previous instances
-
- o deletes or modifies a previously changed instance
-
-
-
-Daboo Standards Track [Page 77]
-
-RFC 5546 iTIP December 2009
-
-
- "Attendee"-initiated actions:
-
- o changes status for a particular recurrence instance
-
- o sends a "COUNTER" for a particular recurrence instance
-
- An instance of a recurring event is assigned a unique identification,
- "RECURRENCE-ID" property, when that instance is renegotiated.
- Negotiation may be necessary when a substantive change to the event
- or to-do has been made (such as changing the start time, end time,
- due date, or location). The "Organizer" can identify a specific
- recurrence instance using the "RECURRENCE-ID" property. The property
- value is equal to the date/time of the instance. If the "Organizer"
- wishes to change the "DTSTART", the original, unmodified "DTSTART"
- value of the instance is used as the value "RECURRENCE-ID" property,
- and the new "DTSTART" and "DTEND" values reflect the change.
-
-3.7.2. Attendee Property Considerations
-
- The "ORGANIZER" property is required on published events, to-dos, and
- journal entries for two reasons. First, only the "Organizer" is
- allowed to update and redistribute an event or to-do component. It
- follows that the "ORGANIZER" property MUST be present in the event,
- to-do, or journal entry component so that the CUA has a basis for
- authorizing an update. Second, it is prudent to provide a point of
- contact for anyone who receives a published component, in case of
- problems.
-
- Email addresses that correspond to groups of "Calendar Users" could
- be specified as a mailto: URI [RFC2368] calendar user address.
- Sending email to such an address results in email being sent to
- multiple recipients. Such an address may be used as the value of an
- "ATTENDEE" property. Thus, it is possible that the recipient of a
- "REQUEST" does not appear explicitly in the list.
-
- It is recommended that the general approach to finding a "Calendar
- User" in an "Attendee" list be as follows:
-
- 1. Search for the "Calendar User" in the "Attendee" list where
- "CUTYPE=INDIVIDUAL"
-
- 2. Failing (1), look for "Attendees" where "CUTYPE=GROUP" or
- "CUTYPE=UNKNOWN". The CUA then determines if the "Calendar User"
- is a member of one of these groups. If so, the "REPLY" method
- sent to the "Organizer" MUST contain a new "ATTENDEE" property in
- which:
-
- * the "TYPE" property parameter is set to INDIVIDUAL
-
-
-
-Daboo Standards Track [Page 78]
-
-RFC 5546 iTIP December 2009
-
-
- * the "MEMBER" property parameter is set to the name of the
- group
-
- 3. Failing (2), the CUA MAY ignore or accept the request as the
- "Calendar User" wishes.
-
-3.7.3. Extension Tokens
-
- To make iCalendar objects extensible, new component, property, or
- property parameters can be used. Two types of extensions are defined
- by [RFC5545]: IANA-registered tokens ("iana-token") and experimental
- use tokens ("x-name"). A client SHOULD save "iana-token's" and MAY
- use them in replies. A client MAY save "x-name's" and MAY use them
- in replies. When delegating or forwarding messages to other CUs, a
- client SHOULD include "iana-token's" and "x-names's".
-
-4. Examples
-
-4.1. Published Event Examples
-
- In the calendaring and scheduling context, publication refers to the
- one-way transfer of event information. Consumers of published events
- simply incorporate the event into a calendar. No reply is expected.
- Individual "A" publishes an event. Individual "B" reads the event
- and incorporates it into their calendar. Events are published in
- several ways, including embedding the event as an object in a web
- page, emailing the event to a distribution list, or posting the event
- to a newsgroup.
-
- The table below illustrates the sequence of events between the
- publisher and the consumers of a published event.
-
- +----------------+-----------------------+--------------------------+
- | Action | Organizer | Receiver |
- +----------------+-----------------------+--------------------------+
- | Publish an | "A" sends or posts a | "B" reads a published |
- | event | PUBLISH message. | event. |
- | | | |
- | Publish an | "A" sends or posts a | "B" reads the updated |
- | updated event | PUBLISH message. | event. |
- | | | |
- | Cancel a | "A" sends or posts a | "B" reads the canceled |
- | published | CANCEL message. | event publication. |
- | event | | |
- +----------------+-----------------------+--------------------------+
-
-
-
-
-
-
-Daboo Standards Track [Page 79]
-
-RFC 5546 iTIP December 2009
-
-
-4.1.1. A Minimal Published Event
-
- The iCalendar object below describes a single event that begins on
- July 1, 1997 at 20:00 UTC. This event contains the minimum set of
- properties for a "PUBLISH" for a "VEVENT" calendar component.
-
- BEGIN:VCALENDAR
- METHOD:PUBLISH
- PRODID:-//Example/ExampleCalendarClient//EN
- VERSION:2.0
- BEGIN:VEVENT
- ORGANIZER:mailto:a@example.com
- DTSTART:19970701T200000Z
- DTSTAMP:19970611T190000Z
- SUMMARY:ST. PAUL SAINTS -VS- DULUTH-SUPERIOR DUKES
- UID:0981234-1234234-23@example.com
- END:VEVENT
- END:VCALENDAR
-
-4.1.2. Changing a Published Event
-
- The iCalendar object below describes an update to the event described
- in Section 4.1.1; the time has been changed, an end time has been
- added, and the sequence number has been adjusted.
-
- BEGIN:VCALENDAR
- METHOD:PUBLISH
- VERSION:2.0
- PRODID:-//Example/ExampleCalendarClient//EN
- BEGIN:VEVENT
- ORGANIZER:mailto:a@example.com
- DTSTAMP:19970612T190000Z
- DTSTART:19970701T210000Z
- DTEND:19970701T230000Z
- SEQUENCE:1
- UID:0981234-1234234-23@example.com
- SUMMARY:ST. PAUL SAINTS -VS- DULUTH-SUPERIOR DUKES
- END:VEVENT
- END:VCALENDAR
-
- The "UID" property is used by the client to identify the event. The
- "SEQUENCE" property indicates that this is a change to the event.
- The event with a matching "UID" and sequence number 0 is superseded
- by this event.
-
- The "SEQUENCE" property provides a reliable way to distinguish
- different versions of the same event. Each time an event is
- published, its sequence number is incremented. If a client receives
-
-
-
-Daboo Standards Track [Page 80]
-
-RFC 5546 iTIP December 2009
-
-
- an event with a sequence number 5 and finds it has the same event
- with sequence number 2, the event SHOULD be updated. However, if the
- client received an event with sequence number 2 and finds it already
- has sequence number 5 of the same event, the event MUST NOT be
- updated.
-
-4.1.3. Canceling a Published Event
-
- The iCalendar object below cancels the event described in
- Section 4.1.1. This cancels the event with "SEQUENCE" property of 0,
- 1, and 2.
-
- BEGIN:VCALENDAR
- METHOD:CANCEL
- VERSION:2.0
- PRODID:-//Example/ExampleCalendarClient//EN
- BEGIN:VEVENT
- ORGANIZER:mailto:a@example.com
- COMMENT:DUKES forfeit the game
- SEQUENCE:2
- UID:0981234-1234234-23@example.com
- DTSTAMP:19970613T190000Z
- END:VEVENT
- END:VCALENDAR
-
-4.1.4. A Rich Published Event
-
- This example describes the same event as in Section 4.1.1, but in
- much greater detail.
-
- BEGIN:VCALENDAR
- PRODID:-//Example/ExampleCalendarClient//EN
- METHOD:PUBLISH
- SCALE:GREGORIAN
- VERSION:2.0
- BEGIN:VTIMEZONE
- TZID:America-Chicago
- TZURL:http://example.com/tz/America-Chicago
- BEGIN:STANDARD
- DTSTART:19671029T020000
- RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
- TZOFFSETFROM:-0500
- TZOFFSETTO:-0600
- TZNAME:CST
- END:STANDARD
- BEGIN:DAYLIGHT
- DTSTART:19870405T020000
- RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
-
-
-
-Daboo Standards Track [Page 81]
-
-RFC 5546 iTIP December 2009
-
-
- TZOFFSETFROM:-0600
- TZOFFSETTO:-0500
- TZNAME:CDT
- END:DAYLIGHT
- END:VTIMEZONE
- BEGIN:VEVENT
- ORGANIZER:mailto:a@example.com
- ATTACH:http://www.example.com/
- CATEGORIES:SPORTS EVENT,ENTERTAINMENT
- CLASS:PRIVATE
- DESCRIPTION:MIDWAY STADIUM\n
- Big time game. MUST see.\n
- Expected duration:2 hours\n
- DTEND;TZID=America-Chicago:19970701T180000
- DTSTART;TZID=America-Chicago:19970702T160000
- DTSTAMP:19970614T190000Z
- STATUS:CONFIRMED
- LOCATION;VALUE=URI:http://stadium.example.com/
- PRIORITY:2
- RESOURCES:SCOREBOARD
- SEQUENCE:3
- SUMMARY:ST. PAUL SAINTS -VS- DULUTH-SUPERIOR DUKES
- UID:0981234-1234234-23@example.com
- RELATED-TO:0981234-1234234-14@example.com
- BEGIN:VALARM
- TRIGGER:-PT2H
- ACTION:DISPLAY
- DESCRIPTION:You should be leaving for the game now.
- END:VALARM
- BEGIN:VALARM
- TRIGGER:-PT30M
- ACTION:AUDIO
- END:VALARM
- END:VEVENT
- END:VCALENDAR
-
- The "RELATED-TO" field contains the "UID" property of a related
- calendar event. The "SEQUENCE" property 3 indicates that this event
- supersedes versions 0, 1, and 2.
-
-
-
-
-
-
-
-
-
-
-
-
-Daboo Standards Track [Page 82]
-
-RFC 5546 iTIP December 2009
-
-
-4.1.5. Anniversaries or Events Attached to Entire Days
-
- This example demonstrates the use of the "VALUE" parameter to tie a
- "VEVENT" to a day rather than a specific time.
-
- BEGIN:VCALENDAR
- PRODID:-//Example/ExampleCalendarClient//EN
- METHOD:PUBLISH
- VERSION:2.0
- BEGIN:VEVENT
- ORGANIZER:mailto:a@example.com
- DTSTAMP:19970614T190000Z
- UID:0981234-1234234-23@example.com
- DTSTART;VALUE=DATE:19970714
- RRULE:FREQ=YEARLY;INTERVAL=1
- SUMMARY: Bastille Day
- END:VEVENT
- END:VCALENDAR
-
-4.2. Group Event Examples
-
- Group events are distinguished from published events in that they
- have "Attendees" and there is interaction between the "Attendees" and
- the "Organizer" with respect to the event. Individual "A" requests a
- meeting between individuals "A", "B", "C", and "D". Individual "B"
- confirms attendance to the meeting. Individual "C" declines
- attendance. Individual "D" tentatively confirms attendance. The
- following table illustrates the message flow between these
- individuals. "A", the CU scheduling the meeting, is referenced as
- the "Organizer".
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Daboo Standards Track [Page 83]
-
-RFC 5546 iTIP December 2009
-
-
- +--------------+-----------------------+----------------------------+
- | Action | "Organizer" | Attendee |
- +--------------+-----------------------+----------------------------+
- | Initiate a | "A" sends a REQUEST | |
- | meeting | message to "B", "C", | |
- | request | and "D". | |
- | | | |
- | Accept the | | "B" sends a REPLY message |
- | meeting | | to "A" with its ATTENDEE |
- | request | | PARTSTAT parameter set to |
- | | | ACCEPTED. |
- | | | |
- | Decline the | | "C" sends a REPLY message |
- | meeting | | to "A" with its ATTENDEE |
- | request | | PARTSTAT parameter set to |
- | | | DECLINED. |
- | | | |
- | Tentatively | | "D" sends a REPLY message |
- | accept the | | to "A" with its ATTENDEE |
- | meeting | | PARTSTAT parameter set to |
- | request | | TENTATIVE. |
- | | | |
- | Confirm | "A" sends a REQUEST | |
- | meeting | message to "B" and | |
- | status with | "D" with updated | |
- | Attendees | information. | |
- +--------------+-----------------------+----------------------------+
-
-4.2.1. A Group Event Request
-
- A sample meeting request is sent from "A" to "B", "C", and "D". "E"
- is also sent a copy of the request but is not expected to attend and
- need not reply. "E" illustrates how CUAs might implement an "FYI"-
- type feature. Note the use of the "ROLE" parameter. The default
- value for the "ROLE" parameter is "REQ-PARTICIPANT" and it need not
- be enumerated. In this case, we are using the value "NON-
- PARTICIPANT" to indicate "E" is a non-attending CU. The parameter is
- not needed on other "Attendees" since "PARTICIPANT" is the default
- value.
-
- BEGIN:VCALENDAR
- PRODID:-//Example/ExampleCalendarClient//EN
- METHOD:REQUEST
- VERSION:2.0
- BEGIN:VEVENT
- ORGANIZER:mailto:a@example.com
- ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED;CN=A:mailto:a@example.com
- ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=B:mailto:b@example.com
-
-
-
-Daboo Standards Track [Page 84]
-
-RFC 5546 iTIP December 2009
-
-
- ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=C:mailto:c@example.com
- ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=Hal:mailto:d@example.com
- ATTENDEE;RSVP=FALSE;CUTYPE=ROOM:conf_big@example.com
- ATTENDEE;ROLE=NON-PARTICIPANT;RSVP=FALSE:mailto:e@example.com
- DTSTAMP:19970611T190000Z
- DTSTART:19970701T200000Z
- DTEND:19970701T2100000Z
- SUMMARY:Conference
- UID:calsrv.example.com-873970198738777@example.com
- SEQUENCE:0
- STATUS:CONFIRMED
- END:VEVENT
- END:VCALENDAR
-
-4.2.2. Reply to a Group Event Request
-
- "Attendee" "B" accepts the meeting.
-
- BEGIN:VCALENDAR
- PRODID:-//Example/ExampleCalendarClient//EN
- METHOD:REPLY
- VERSION:2.0
- BEGIN:VEVENT
- ATTENDEE;PARTSTAT=ACCEPTED:mailto:b@example.com
- ORGANIZER:mailto:a@example.com
- UID:calsrv.example.com-873970198738777@example.com
- SEQUENCE:0
- REQUEST-STATUS:2.0;Success
- DTSTAMP:19970612T190000Z
- END:VEVENT
- END:VCALENDAR
-
- "B" could have declined the meeting or indicated tentative acceptance
- by setting the "ATTENDEE" "PARTSTAT" parameter to "DECLINED" or
- "TENTATIVE", respectively. Also, "REQUEST-STATUS" is not required in
- successful transactions.
-
-4.2.3. Update an Event
-
- The event is moved to a different time. The combination of the "UID"
- property (unchanged) and the "SEQUENCE" (bumped to 1) properties
- indicate the update.
-
- BEGIN:VCALENDAR
- PRODID:-//Example/ExampleCalendarClient//EN
- METHOD:REQUEST
- VERSION:2.0
- BEGIN:VEVENT
-
-
-
-Daboo Standards Track [Page 85]
-
-RFC 5546 iTIP December 2009
-
-
- ORGANIZER:mailto:a@example.com
- ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:mailto:a@example.com
- ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:mailto:b@example.com
- ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:mailto:c@example.com
- ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=Hal:mailto:d@example.com
- ATTENDEE;ROLE=NON-PARTICIPANT;RSVP=FALSE;
- CUTYPE=ROOM:mailto:conf@example.com
- ATTENDEE;ROLE=NON-PARTICIPANT;RSVP=FALSE:mailto:e@example.com
- DTSTART:19970701T180000Z
- DTEND:19970701T190000Z
- SUMMARY:Phone Conference
- UID:calsrv.example.com-873970198738777@example.com
- SEQUENCE:1
- DTSTAMP:19970613T190000Z
- STATUS:CONFIRMED
- END:VEVENT
- END:VCALENDAR
-
-4.2.4. Countering an Event Proposal
-
- "A" sends a "REQUEST" to "B" and "C". "B" makes a counter proposal
- to "A" to change the time and location.
-
- "A" sends the following "REQUEST":
-
- BEGIN:VCALENDAR
- PRODID:-//Example/ExampleCalendarClient//EN
- METHOD:REQUEST
- VERSION:2.0
- BEGIN:VEVENT
- ORGANIZER:mailto:a@example.com
- ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:mailto:a@example.com
- ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:mailto:b@example.com
- ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:mailto:c@example.com
- DTSTART:19970701T190000Z
- DTEND:19970701T200000Z
- SUMMARY:Discuss the Merits of the election results
- LOCATION:Green Conference Room
- UID:calsrv.example.com-873970198738777a@example.com
- SEQUENCE:0
- DTSTAMP:19970611T190000Z
- STATUS:CONFIRMED
- END:VEVENT
- END:VCALENDAR
-
-
-
-
-
-
-
-Daboo Standards Track [Page 86]
-
-RFC 5546 iTIP December 2009
-
-
- "B" sends "COUNTER" to "A", requesting changes to time and place.
- "B" uses the "COMMENT" property to communicate a rationale for the
- change. Note that the "SEQUENCE" property is not incremented on a
- "COUNTER".
-
- BEGIN:VCALENDAR
- PRODID:-//Example/ExampleCalendarClient//EN
- METHOD:COUNTER
- VERSION:2.0
- BEGIN:VEVENT
- ORGANIZER:mailto:a@example.com
- ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:mailto:a@example.com
- ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:mailto:b@example.com
- ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:mailto:c@example.com
- DTSTART:19970701T160000Z
- DTEND:19970701T170000Z
- DTSTAMP:19970612T190000Z
- SUMMARY:Discuss the Merits of the election results
- LOCATION:Blue Conference Room
- COMMENT:This time works much better and I think the big conference
- room is too big
- UID:calsrv.example.com-873970198738777a@example.com
- SEQUENCE:0
- END:VEVENT
- END:VCALENDAR
-
- "A" accepts the changes from "B". To accept a counter proposal, the
- "Organizer" sends a new event "REQUEST" with an incremented sequence
- number.
-
- BEGIN:VCALENDAR
- PRODID:-//Example/ExampleCalendarClient//EN
- METHOD:REQUEST
- VERSION:2.0
- BEGIN:VEVENT
- ORGANIZER:mailto:a@example.com
- ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:mailto:a@example.com
- ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:mailto:b@example.com
- ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:mailto:c@example.com
- DTSTAMP:19970613T190000Z
- DTSTART:19970701T160000Z
- DTEND:19970701T170000Z
- SUMMARY:Discuss the Merits of the election results - changed to
- meet B's schedule
- LOCATION:Blue Conference Room
- UID:calsrv.example.com-873970198738777@example.com
- SEQUENCE:1
- STATUS:CONFIRMED
-
-
-
-Daboo Standards Track [Page 87]
-
-RFC 5546 iTIP December 2009
-
-
- END:VEVENT
- END:VCALENDAR
-
- Instead, "A" rejects "B's" counter proposal.
-
- BEGIN:VCALENDAR
- PRODID:-//Example/ExampleCalendarClient//EN
- METHOD:DECLINECOUNTER
- VERSION:2.0
- BEGIN:VEVENT
- ORGANIZER:mailto:a@example.com
- ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:mailto:b@example.com
- COMMENT:Sorry, I cannot change this meeting time
- UID:calsrv.example.com-873970198738777@example.com
- SEQUENCE:0
- DTSTAMP:19970614T190000Z
- END:VEVENT
- END:VCALENDAR
-
-4.2.5. Delegating an Event
-
- When delegating an event request to another "Calendar User", the
- "Delegator" must both update the "Organizer" with a "REPLY" and send
- a request to the "Delegate". There is currently no protocol
- limitation to delegation depth. It is possible for the original
- delegate to delegate the meeting to someone else, and so on. When a
- request is delegated from one CUA to another, there are a number of
- responsibilities required of the "Delegator". The "Delegator" MUST:
-
- o Send a "REPLY" to the "Organizer" with the following updates:
-
- A. The "Delegator's" "ATTENDEE" property "PARTSTAT" parameter is
- set to "DELEGATED" and the "DELEGATED-TO" parameter is set to
- the address of the "Delegate".
-
- B. Add an additional "ATTENDEE" property for the "Delegate" with
- the "DELEGATED-FROM" property parameter set to the
- "Delegator".
-
- C. Indicate whether they want to continue to receive updates when
- the "Organizer" sends out updated versions of the event.
- Setting the "RSVP" property parameter to "TRUE" will cause the
- updates to be sent; setting it to "FALSE" causes no further
- updates to be sent. Note that in either case, if the
- "Delegate" declines the invitation, the "Delegator" will be
- notified.
-
-
-
-
-
-Daboo Standards Track [Page 88]
-
-RFC 5546 iTIP December 2009
-
-
- o The "Delegator" MUST also send a copy of the original "REQUEST"
- method to the "Delegate", with changes (A) and (B), as detailed
- above applied.
-
- If the "Delegate" declines the meeting, the "Organizer" MUST send an
- update "REQUEST" to the "Delegator" so that the "Delegator" may elect
- to delegate the "REQUEST" to another CUA.
-
- +----------------+-----------------+--------------------------------+
- | Action | "Organizer" | Attendee |
- +----------------+-----------------+--------------------------------+
- | Initiate a | "A" sends a | |
- | meeting | REQUEST message | |
- | request | to "B" and "C". | |
- | | | |
- | Delegate: "C" | | "C" sends a REPLY to "A" with |
- | delegates to | | the ATTENDEE PARTSTAT |
- | "E" | | parameter set to DELEGATED and |
- | | | with a new ATTENDEE property |
- | | | for "E". "E's" ATTENDEE |
- | | | DELEGATED-FROM parameter is |
- | | | set to "C". "C's" ATTENDEE |
- | | | DELEGATED-TO parameter is set |
- | | | to "E". "C" sends REQUEST |
- | | | message to "E" with the |
- | | | original meeting request |
- | | | information. The PARTSTAT |
- | | | property parameter for "C" is |
- | | | set to DELEGATED and the |
- | | | DELEGATED-TO parameter is set |
- | | | to the address of "E". An |
- | | | ATTENDEE property is added for |
- | | | "E" and the DELEGATED-FROM |
- | | | parameter is set to the |
- | | | address of "C". |
- | | | |
- | Confirm | | "E" sends REPLY message to |
- | meeting | | "A", and optionally to "C", |
- | attendance | | with its PARTSTAT property |
- | | | parameter set to ACCEPTED. |
- | | | |
- | Optional: | "A" sends | |
- | Redistribute | REQUEST message | |
- | meeting to | to "B", "C", | |
- | Attendees | and "E". | |
- +----------------+-----------------+--------------------------------+
-
-
-
-
-
-Daboo Standards Track [Page 89]
-
-RFC 5546 iTIP December 2009
-
-
- "C" responds to the "Organizer".
-
- BEGIN:VCALENDAR
- PRODID:-//Example/ExampleCalendarClient//EN
- METHOD:REPLY
- VERSION:2.0
- BEGIN:VEVENT
- ORGANIZER:mailto:a@example.com
- ATTENDEE;PARTSTAT=DELEGATED;DELEGATED-
- TO="mailto:e@example.com":mailto:c@example.com
- UID:calsrv.example.com-873970198738777@example.com
- SEQUENCE:0
- REQUEST-STATUS:2.0;Success
- DTSTAMP:19970611T190000Z
- END:VEVENT
- END:VCALENDAR
-
- "Attendee" "C" delegates presence at the meeting to "E".
-
- BEGIN:VCALENDAR
- PRODID:-//Example/ExampleCalendarClient//EN
- METHOD:REQUEST
- VERSION:2.0
- BEGIN:VEVENT
- ORGANIZER:mailto:a@example.com
- ATTENDEE;PARTSTAT=DELEGATED;DELEGATED-
- TO="mailto:e@example.com":mailto:c@example.com
- ATTENDEE;RSVP=TRUE;
- DELEGATED-FROM="mailto:c@example.com":mailto:e@example.com
- DTSTART:19970701T180000Z
- DTEND:19970701T200000Z
- SUMMARY:Phone Conference
- UID:calsrv.example.com-873970198738777@example.com
- SEQUENCE:0
- STATUS:CONFIRMED
- DTSTAMP:19970611T190000Z
- END:VEVENT
- END:VCALENDAR
-
-4.2.6. Delegate Accepts the Meeting
-
- To accept a delegated meeting, the delegate, "E", sends the following
- message to "A" and "C".
-
- BEGIN:VCALENDAR
- PRODID:-//Example/ExampleCalendarClient//EN
- METHOD:REPLY
- VERSION:2.0
-
-
-
-Daboo Standards Track [Page 90]
-
-RFC 5546 iTIP December 2009
-
-
- BEGIN:VEVENT
- ORGANIZER:mailto:a@example.com
- ATTENDEE;PARTSTAT=ACCEPTED;DELEGATED-
- FROM="mailto:c@example.com":mailto:e@example.com
- ATTENDEE;PARTSTAT=DELEGATED;
- DELEGATED-TO="mailto:e@example.com":mailto:c@example.com
- UID:calsrv.example.com-873970198738777@example.com
- SEQUENCE:0
- REQUEST-STATUS:2.0;Success
- DTSTAMP:19970614T190000Z
- END:VEVENT
- END:VCALENDAR
-
-4.2.7. Delegate Declines the Meeting
-
- In this example, the "Delegate" declines the meeting request and sets
- the "ATTENDEE" property "PARTSTAT" parameter to "DECLINED". The
- "Organizer" SHOULD resend the "REQUEST" to "C" with the "PARTSTAT"
- parameter of the "Delegate" set to "DECLINED". This lets the
- "Delegator" know that the "Delegate" has declined and provides an
- opportunity to the "Delegator" to either accept the request or
- delegate it to another CU.
-
- "E" responds to "A" and "C". Note the use of the "COMMENT" property
- "E" uses to indicate why the delegation was declined.
-
- BEGIN:VCALENDAR
- PRODID:-//Example/ExampleCalendarClient//EN
- METHOD:REPLY
- VERSION:2.0
- BEGIN:VEVENT
- ORGANIZER:mailto:a@example.com
- ATTENDEE;PARTSTAT=DELEGATED;
- DELEGATED-TO="mailto:e@example.com":mailto:c@example.com
- ATTENDEE;PARTSTAT=DECLINED;
- DELEGATED-FROM="mailto:c@example.com":mailto:e@example.com
- COMMENT:Sorry, I will be out of town at that time.
- UID:calsrv.example.com-873970198738777@example.com
- SEQUENCE:0
- REQUEST-STATUS:2.0;Success
- DTSTAMP:19970614T190000Z
- END:VEVENT
- END:VCALENDAR
-
- "A" resends the "REQUEST" method to "C". "A" may also wish to
- express the fact that the item was delegated in the "COMMENT"
- property.
-
-
-
-
-Daboo Standards Track [Page 91]
-
-RFC 5546 iTIP December 2009
-
-
- BEGIN:VCALENDAR
- PRODID:-//Example/ExampleCalendarClient//EN
- METHOD:REQUEST
- VERSION:2.0
- BEGIN:VEVENT
- ORGANIZER:mailto:a@example.com
- ATTENDEE;PARTSTAT=DECLINED;
- DELEGATED-FROM="mailto:c@example.com":mailto:e@example.com
- ATTENDEE;RSVP=TRUE:mailto:c@example.com
- UID:calsrv.example.com-873970198738777@example.com
- SEQUENCE:0
- SUMMARY:Phone Conference
- DTSTART:19970701T180000Z
- DTEND:19970701T200000Z
- DTSTAMP:19970614T200000Z
- COMMENT:DELEGATE (ATTENDEE mailto:e@example.com) DECLINED YOUR
- INVITATION
- END:VEVENT
- END:VCALENDAR
-
-4.2.8. Forwarding an Event Request
-
- The protocol does not prevent an "Attendee" from "forwarding" a
- "VEVENT" calendar component to other "Calendar Users". Forwarding
- differs from delegation in that the forwarded "Calendar User" (often
- referred to as a "Party Crasher") does not replace the forwarding
- "Calendar User". Implementations are not required to add the "Party
- Crasher" to the "Attendee" list, and hence there is no guarantee that
- a "Party Crasher" will receive additional updates to the event. The
- forwarding "Calendar User" SHOULD NOT add the "Party Crasher" to the
- "Attendee" list. The "Organizer" MAY add the forwarded "Calendar
- User" to the "Attendee" list.
-
-4.2.9. Cancel a Group Event
-
- Individual "A" requests a meeting between individuals "A", "B", "C",
- and "D". Individual "B" declines attendance to the meeting.
- Individual "A" decides to cancel the meeting. The following table
- illustrates the sequence of messages that would be exchanged between
- these individuals.
-
- Messages related to a previously canceled event ("SEQUENCE" property
- value is less than the "SEQUENCE" property value of the "CANCEL"
- message) MUST be ignored.
-
-
-
-
-
-
-
-Daboo Standards Track [Page 92]
-
-RFC 5546 iTIP December 2009
-
-
- +-------------+---------------------+-------------------------------+
- | Action | Organizer | Attendee |
- +-------------+---------------------+-------------------------------+
- | Initiate a | "A" sends a REQUEST | |
- | meeting | message to "B", | |
- | request | "C", and "D". | |
- | | | |
- | Decline the | | "B" sends a REPLY message to |
- | meeting | | "A" with its PARTSTAT |
- | request | | parameter set to DECLINED. |
- | | | |
- | Cancel the | "A" sends a CANCEL | |
- | meeting | message to "B", | |
- | | "C", and "D". | |
- +-------------+---------------------+-------------------------------+
-
- This example shows how "A" cancels the event.
-
- BEGIN:VCALENDAR
- PRODID:-//Example/ExampleCalendarClient//EN
- METHOD:CANCEL
- VERSION:2.0
- BEGIN:VEVENT
- ORGANIZER:mailto:a@example.com
- ATTENDEE;CUTYPE=INDIVIDUAL;mailto:a@example.com
- ATTENDEE;CUTYPE=INDIVIDUAL:mailto:b@example.com
- ATTENDEE;CUTYPE=INDIVIDUAL:mailto:c@example.com
- ATTENDEE;CUTYPE=INDIVIDUAL:mailto:d@example.com
- COMMENT:Mr. B cannot attend. It's raining. Lets cancel.
- UID:calsrv.example.com-873970198738777@example.com
- SEQUENCE:1
- STATUS:CANCELLED
- DTSTAMP:19970613T190000Z
- END:VEVENT
- END:VCALENDAR
-
-4.2.10. Removing Attendees
-
- "A" wants to remove "B" from a meeting. This is done by sending a
- "CANCEL" to "B" and removing "B" from the "Attendee" list in the
- master copy of the event.
-
-
-
-
-
-
-
-
-
-
-Daboo Standards Track [Page 93]
-
-RFC 5546 iTIP December 2009
-
-
- +--------------------+-----------------------------------+----------+
- | Action | Organizer | Attendee |
- +--------------------+-----------------------------------+----------+
- | Remove "B" as an | "A" sends a CANCEL message to | |
- | Attendee | "B". | |
- | | | |
- | Update the master | "A" optionally sends the updated | |
- | copy of the event | event to the remaining Attendees. | |
- +--------------------+-----------------------------------+----------+
-
- The original meeting includes "A", "B", "C", and "D". The example
- below shows the "CANCEL" that "A" sends to "B". Note that in the
- example below, the "STATUS" property is omitted. This is used when
- the meeting itself is cancelled and not when the intent is to remove
- an "Attendee" from the event.
-
- BEGIN:VCALENDAR
- PRODID:-//Example/ExampleCalendarClient//EN
- METHOD:CANCEL
- VERSION:2.0
- BEGIN:VEVENT
- ORGANIZER:mailto:a@example.com
- ATTENDEE:mailto:b@example.com
- COMMENT:You're off the hook for this meeting
- UID:calsrv.example.com-873970198738777@example.com
- DTSTAMP:19970613T193000Z
- SEQUENCE:1
- END:VEVENT
- END:VCALENDAR
-
- The updated master copy of the event is shown below. The "Organizer"
- MAY resend the updated event to the remaining "Attendees". Note that
- "B" has been removed.
-
- BEGIN:VCALENDAR
- PRODID:-//Example/ExampleCalendarClient//EN
- METHOD:REQUEST
- VERSION:2.0
- BEGIN:VEVENT
- ORGANIZER:mailto:a@example.com
- ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:mailto:a@example.com
- ATTENDEE;CUTYPE=INDIVIDUAL:mailto:c@example.com
- ATTENDEE;CUTYPE=INDIVIDUAL:mailto:d@example.com
- ATTENDEE;CUTYPE=ROOM:mailto:cr_big@example.com
- ATTENDEE;ROLE=NON-PARTICIPANT;
- RSVP=FALSE:mailto:e@example.com
- DTSTAMP:19970611T190000Z
- DTSTART:19970701T200000Z
-
-
-
-Daboo Standards Track [Page 94]
-
-RFC 5546 iTIP December 2009
-
-
- DTEND:19970701T203000Z
- SUMMARY:Phone Conference
- UID:calsrv.example.com-873970198738777@example.com
- SEQUENCE:2
- STATUS:CONFIRMED
- END:VEVENT
- END:VCALENDAR
-
-4.2.11. Replacing the Organizer
-
- The scenario for this example begins with "A" as the "Organizer" for
- a recurring meeting with "B", "C", and "D". "A" receives a new job
- offer in another country and drops out of touch. "A" left no
- forwarding address or way to be reached. Using out-of-band
- communication, the other "Attendees" eventually learn what has
- happened and reach an agreement that "B" should become the new
- "Organizer" for the meeting. To do this, "B" sends out a new version
- of the event and the other "Attendees" agree to accept "B" as the new
- "Organizer". "B" also removes "A" from the event.
-
- When the "Organizer" is replaced, the "SEQUENCE" property value MUST
- be incremented.
-
- This is the message "B" sends to "C" and "D".
-
- BEGIN:VCALENDAR
- PRODID:-//Example/ExampleCalendarClient//EN
- METHOD:REQUEST
- VERSION:2.0
- BEGIN:VEVENT
- ORGANIZER:mailto:b@example.com
- ATTENDEE;ROLE=CHAIR;STATUS=ACCEPTED:mailto:b@example.com
- ATTENDEE;CUTYPE=INDIVIDUAL:mailto:c@example.com
- ATTENDEE;CUTYPE=INDIVIDUAL:mailto:d@example.com
- DTSTAMP:19970611T190000Z
- DTSTART:19970701T200000Z
- DTEND:19970701T203000Z
- RRULE:FREQ=WEEKLY
- SUMMARY:Phone Conference
- UID:123456@example.com
- SEQUENCE:1
- STATUS:CONFIRMED
- END:VEVENT
- END:VCALENDAR
-
-
-
-
-
-
-
-Daboo Standards Track [Page 95]
-
-RFC 5546 iTIP December 2009
-
-
-4.3. Busy Time Examples
-
- Busy time objects can be used in several ways. First, a CU may
- request busy time from another CU for a specific range of time. That
- request can be answered with a busy time "REPLY". Additionally, a CU
- may simply publish their busy time for a given interval and point
- other CUs to the published location. The following examples outline
- both scenarios.
-
-4.3.1. Publish Busy Time
-
- Individual "A" publishes busy time for one week.
-
- BEGIN:VCALENDAR
- PRODID:-//Example/ExampleCalendarClient//EN
- VERSION:2.0
- METHOD:PUBLISH
- BEGIN:VFREEBUSY
- DTSTAMP:19980101T124100Z
- ORGANIZER:mailto:a@example.com
- DTSTART:19980101T124200Z
- DTEND:19980108T124200Z
- FREEBUSY:19980101T180000Z/19980101T190000Z
- FREEBUSY:19980103T020000Z/19980103T050000Z
- FREEBUSY:19980107T020000Z/19980107T050000Z
- FREEBUSY:19980113T000000Z/19980113T010000Z
- FREEBUSY:19980115T190000Z/19980115T200000Z
- FREEBUSY:19980115T220000Z/19980115T230000Z
- FREEBUSY:19980116T013000Z/19980116T043000Z
- END:VFREEBUSY
- END:VCALENDAR
-
-4.3.2. Request Busy Time
-
- Individual "A" requests busy time from individuals "B" and "C".
- Individuals "B" and "C" reply with busy time data to individual "A".
- The following table illustrates the sequence of messages that would
- be exchanged between these individuals.
-
-
-
-
-
-
-
-
-
-
-
-
-
-Daboo Standards Track [Page 96]
-
-RFC 5546 iTIP December 2009
-
-
- +---------------------+--------------------+------------------------+
- | Action | Organizer | Attendee |
- +---------------------+--------------------+------------------------+
- | Initiate a busy | "A" sends REQUEST | |
- | time request | message to "B" and | |
- | | "C". | |
- | | | |
- | Reply to the BUSY | | "B" sends a REPLY |
- | request with BUSY | | message to "A" with |
- | time data | | busy time data. |
- +---------------------+--------------------+------------------------+
-
- "A" sends a "REQUEST" to "B" and "C" for busy time.
-
- BEGIN:VCALENDAR
- PRODID:-//Example/ExampleCalendarClient//EN
- METHOD:REQUEST
- VERSION:2.0
- BEGIN:VFREEBUSY
- ORGANIZER:mailto:a@example.com
- ATTENDEE;ROLE=CHAIR:mailto:a@example.com
- ATTENDEE:mailto:b@example.com
- ATTENDEE:mailto:c@example.com
- DTSTAMP:19970613T190000Z
- DTSTART:19970701T080000Z
- DTEND:19970701T200000
- UID:calsrv.example.com-873970198738777@example.com
- END:VFREEBUSY
- END:VCALENDAR
-
-4.3.3. Reply to a Busy Time Request
-
- "B" sends a "REPLY" method type of a "VFREEBUSY" calendar component
- to "A".
-
- BEGIN:VCALENDAR
- PRODID:-//Example/ExampleCalendarClient//EN
- METHOD:REPLY
- VERSION:2.0
- BEGIN:VFREEBUSY
- ORGANIZER:mailto:a@example.com
- ATTENDEE:mailto:b@example.com
- DTSTART:19970701T080000Z
- DTEND:19970701T200000Z
- UID:calsrv.example.com-873970198738777@example.com
- FREEBUSY:19970701T090000Z/PT1H,19970701T140000Z/PT30M
- DTSTAMP:19970613T190030Z
- END:VFREEBUSY
-
-
-
-Daboo Standards Track [Page 97]
-
-RFC 5546 iTIP December 2009
-
-
- END:VCALENDAR
-
- "B" is busy from 09:00 to 10:00 and from 14:00 to 14:30.
-
-4.4. Recurring Event and Time Zone Examples
-
-4.4.1. A Recurring Event Spanning Time Zones
-
- This event describes a weekly phone conference. The "Attendees" are
- each in a different time zone.
-
- BEGIN:VCALENDAR
- PRODID:-//Example/ExampleCalendarClient//EN
- METHOD:REQUEST
- VERSION:2.0
- BEGIN:VTIMEZONE
- TZID:America-SanJose
- TZURL:http://example.com/tz/America-SanJose
- BEGIN:STANDARD
- DTSTART:19671029T020000
- RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
- TZOFFSETFROM:-0700
- TZOFFSETTO:-0800
- TZNAME:PST
- END:STANDARD
- BEGIN:DAYLIGHT
- DTSTART:19870405T020000
- RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
- TZOFFSETFROM:-0800
- TZOFFSETTO:-0700
- TZNAME:PDT
- END:DAYLIGHT
- END:VTIMEZONE
- BEGIN:VEVENT
- ORGANIZER:mailto:a@example.com
- ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED;
- CUTYPE=INDIVIDUAL:a@example.com
- ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:b@example.fr
- ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:c@example.jp
- DTSTAMP:19970613T190030Z
- DTSTART;TZID=America-SanJose:19970701T140000
- DTEND;TZID=America-SanJose:19970701T150000
- RRULE:FREQ=WEEKLY;COUNT=20;WKST=SU;BYDAY=TU
- RDATE;TZID=America-SanJose:19970910T140000
- EXDATE;TZID=America-SanJose:19970909T140000
- EXDATE;TZID=America-SanJose:19971028T140000
- SUMMARY:Weekly Phone Conference
- UID:calsrv.example.com-873970198738777@example.com
-
-
-
-Daboo Standards Track [Page 98]
-
-RFC 5546 iTIP December 2009
-
-
- SEQUENCE:0
- STATUS:CONFIRMED
- END:VEVENT
- END:VCALENDAR
-
- The first component of this iCalendar object is the time zone
- component. The "DTSTART" date coincides with the first instance of
- the "RRULE" property.
-
- The recurring meeting is defined in a particular time zone,
- presumably that of the originator. The client for each "Attendee"
- has the responsibility of determining the recurrence time in the
- "Attendee's" time zone.
-
- The repeating event starts on Tuesday, July 1, 1997 at 2:00pm PDT
- (UTC-7). "Attendee" B@example.fr is in France, where the local time
- on this date is 9 hours ahead of PDT, or 23:00 CEST (UTC+2).
- "Attendee" C@example.jp is in Japan, where local time is 16 hours
- ahead of PDT, or Wednesday, July 2 at 06:00 JST (UTC+9). The event
- repeats weekly on Tuesdays (in PST/PDT). The "RRULE" property
- results in 20 instances. The last instance falls on Tuesday,
- November 11, 1997 2:00pm PST. The "RDATE" property adds another
- instance: WED, 10-SEP-1997 2:00 PM PDT.
-
- There are also two exception dates to the recurrence rule. The first
- one is:
-
- o TUE, 09-SEP-1997 14:00 PDT (UTC-7)
-
- o TUE, 09-SEP-1997 23:00 CEST (UTC+2)
-
- o WED, 10-SEP-1997 06:00 JST (UTC+9)
-
-
- and the second is:
-
- o TUE, 28-OCT-1997 14:00 PST (UTC-8)
-
- o TUE, 28-OCT-1997 23:00 CET (UTC+1)
-
- o WED, 29-OCT-1997 07:00 JST (UTC+9)
-
-4.4.2. Modify a Recurring Instance
-
- In this example, the "Organizer" issues a recurring meeting. Later,
- the "Organizer" changes an instance of the event by changing the
- "DTSTART" property. Note the use of "RECURRENCE-ID" property and
- "SEQUENCE" property in the second request.
-
-
-
-Daboo Standards Track [Page 99]
-
-RFC 5546 iTIP December 2009
-
-
- Original Request:
-
- BEGIN:VCALENDAR
- METHOD:REQUEST
- PRODID:-//Example/ExampleCalendarClient//EN
- VERSION:2.0
- BEGIN:VEVENT
- UID:guid-1@example.com
- SEQUENCE:0
- RRULE:FREQ=MONTHLY;BYMONTHDAY=1;UNTIL=19980901T210000Z
- ORGANIZER:mailto:a@example.com
- ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:mailto:a@example.com
- ATTENDEE:mailto:b@example.com
- ATTENDEE:mailto:c@example.com
- ATTENDEE:mailto:d@example.com
- DESCRIPTION:IETF-C&S Conference Call
- CLASS:PUBLIC
- SUMMARY:IETF Calendaring Working Group Meeting
- DTSTART:19970601T210000Z
- DTEND:19970601T220000Z
- LOCATION:Conference Call
- DTSTAMP:19970526T083000Z
- STATUS:CONFIRMED
- END:VEVENT
- END:VCALENDAR
-
- The event request below is to change the time of a specific instance.
- This changes the July 1st instance to July 3rd.
-
- BEGIN:VCALENDAR
- METHOD:REQUEST
- PRODID:-//Example/ExampleCalendarClient//EN
- VERSION:2.0
- BEGIN:VEVENT
- UID:guid-1@example.com
- RECURRENCE-ID:19970701T210000Z
- SEQUENCE:1
- ORGANIZER:mailto:a@example.com
- ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:mailto:a@example.com
- ATTENDEE:mailto:b@example.com
- ATTENDEE:mailto:c@example.com
- ATTENDEE:mailto:d@example.com
- DESCRIPTION:IETF-C&S Conference Call
- CLASS:PUBLIC
- SUMMARY:IETF Calendaring Working Group Meeting
- DTSTART:19970703T210000Z
- DTEND:19970703T220000Z
- LOCATION:Conference Call
-
-
-
-Daboo Standards Track [Page 100]
-
-RFC 5546 iTIP December 2009
-
-
- DTSTAMP:19970626T093000Z
- STATUS:CONFIRMED
- END:VEVENT
- END:VCALENDAR
-
-4.4.3. Cancel an Instance
-
- In this example, the "Organizer" of a recurring event deletes the
- August 1st instance.
-
- BEGIN:VCALENDAR
- METHOD:CANCEL
- PRODID:-//Example/ExampleCalendarClient//EN
- VERSION:2.0
- BEGIN:VEVENT
- UID:guid-1@example.com
- ORGANIZER:mailto:a@example.com
- ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:mailto:a@example.com
- ATTENDEE:mailto:b@example.com
- ATTENDEE:mailto:c@example.com
- ATTENDEE:mailto:d@example.com
- RECURRENCE-ID:19970801T210000Z
- SEQUENCE:2
- STATUS:CANCELLED
- DTSTAMP:19970721T093000Z
- END:VEVENT
- END:VCALENDAR
-
-4.4.4. Cancel a Recurring Event
-
- In this example, the "Organizer" wishes to cancel the entire
- recurring event and any exceptions.
-
- BEGIN:VCALENDAR
- METHOD:CANCEL
- PRODID:-//Example/ExampleCalendarClient//EN
- VERSION:2.0
- BEGIN:VEVENT
- UID:guid-1@example.com
- ORGANIZER:mailto:a@example.com
- ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:mailto:a@example.com
- ATTENDEE:mailto:b@example.com
- ATTENDEE:mailto:c@example.com
- ATTENDEE:mailto:d@example.com
- DTSTAMP:19970721T103000Z
- STATUS:CANCELLED
- SEQUENCE:3
- END:VEVENT
-
-
-
-Daboo Standards Track [Page 101]
-
-RFC 5546 iTIP December 2009
-
-
- END:VCALENDAR
-
-4.4.5. Change All Future Instances
-
- This example changes the meeting location from a conference call to
- Seattle, starting September 1 and extending to all future instances.
-
- BEGIN:VCALENDAR
- METHOD:REQUEST
- PRODID:-//Example/ExampleCalendarClient//EN
- VERSION:2.0
- BEGIN:VEVENT
- UID:guid-1@example.com
- RECURRENCE-ID;THISANDFUTURE:19970901T210000Z
- SEQUENCE:3
- ORGANIZER:mailto:a@example.com
- ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:mailto:a@example.com
- ATTENDEE;RSVP=TRUE:mailto:b@example.com
- ATTENDEE;RSVP=TRUE:mailto:c@example.com
- ATTENDEE;RSVP=TRUE:mailto:d@example.com
- DESCRIPTION:IETF-C&S Discussion
- CLASS:PUBLIC
- SUMMARY:IETF Calendaring Working Group Meeting
- DTSTART:19970901T210000Z
- DTEND:19970901T220000Z
- LOCATION:Building 32, Microsoft, Seattle, WA
- DTSTAMP:19970526T083000Z
- STATUS:CONFIRMED
- END:VEVENT
- END:VCALENDAR
-
-4.4.6. Add a New Instance to a Recurring Event
-
- This example adds a one-time additional instance to the recurring
- event. "Organizer" adds a second July meeting on the 15th.
-
- BEGIN:VCALENDAR
- METHOD:ADD
- PRODID:-//Example/ExampleCalendarClient//EN
- VERSION:2.0
- BEGIN:VEVENT
- UID:123456789@example.com
- SEQUENCE:4
- ORGANIZER:mailto:a@example.com
- ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:mailto:a@example.com
- ATTENDEE;RSVP=TRUE:mailto:b@example.com
- ATTENDEE;RSVP=TRUE:mailto:c@example.com
- ATTENDEE;RSVP=TRUE:mailto:d@example.com
-
-
-
-Daboo Standards Track [Page 102]
-
-RFC 5546 iTIP December 2009
-
-
- DESCRIPTION:IETF-C&S Conference Call
- CLASS:PUBLIC
- SUMMARY:IETF Calendaring Working Group Meeting
- DTSTART:19970715T210000Z
- DTEND:19970715T220000Z
- LOCATION:Conference Call
- DTSTAMP:19970629T093000Z
- STATUS:CONFIRMED
- END:VEVENT
- END:VCALENDAR
-
-4.4.7. Add a New Series of Instances to a Recurring Event
-
- The scenario for this example involves an ongoing meeting, originally
- set up to occur every Tuesday. The "Organizer" later decides that
- the meetings need to be on Tuesdays and Thursdays.
-
- The original event:
-
- BEGIN:VCALENDAR
- METHOD:REQUEST
- PRODID:-//Example/ExampleCalendarClient//EN
- VERSION:2.0
- BEGIN:VEVENT
- UID:123456789@example.com
- SEQUENCE:0
- RRULE:WKST=SU;BYDAY=TU;FREQ=WEEKLY
- ORGANIZER:mailto:a@example.com
- ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:mailto:a@example.com
- ATTENDEE;RSVP=TRUE:mailto:b@example.com
- SUMMARY:Review Accounts
- DTSTART:19980303T210000Z
- DTEND:19980303T220000Z
- LOCATION:The White Room
- DTSTAMP:19980301T093000Z
- STATUS:CONFIRMED
- END:VEVENT
- END:VCALENDAR
-
- The entire event can be rescheduled using a "REQUEST". This is done
- by using the "UID" of the event to reschedule and including the
- modified "RRULE". Note that since this is an entire rescheduling of
- the event, any instance-specific information will be lost, unless
- explicitly included with the update "REQUEST".
-
- BEGIN:VCALENDAR
- METHOD:REQUEST
- PRODID:-//Example/ExampleCalendarClient//EN
-
-
-
-Daboo Standards Track [Page 103]
-
-RFC 5546 iTIP December 2009
-
-
- VERSION:2.0
- BEGIN:VEVENT
- UID:123456789@example.com
- SEQUENCE:7
- RRULE:WKST=SU;BYDAY=TU,TH;FREQ=WEEKLY
- ORGANIZER:mailto:a@example.com
- ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:mailto:a@example.com
- ATTENDEE;RSVP=TRUE:mailto:b@example.com
- SUMMARY:Review Accounts
- DTSTART:19980303T210000Z
- DTEND:19980303T220000Z
- DTSTAMP:19980303T193000Z
- LOCATION:The White Room
- STATUS:CONFIRMED
- END:VEVENT
- END:VCALENDAR
-
-4.4.8. Refreshing a Recurring Event
-
- The next series of examples illustrate how an "Organizer" would
- respond to a "REFRESH" submitted by an "Attendee" after a series of
- instance-specific modifications. To convey all instance-specific
- changes, the "Organizer" must provide the latest event description
- and the relevant instances. The first three examples show the
- history, including the initial "VEVENT" request and subsequent
- instance changes, and finally the "REFRESH".
-
- Original Request:
-
- BEGIN:VCALENDAR
- METHOD:REQUEST
- PRODID:-//Example/ExampleCalendarClient//EN
- VERSION:2.0
- BEGIN:VEVENT
- UID:123456789@example.com
- SEQUENCE:0
- RDATE:19980304T180000Z
- RDATE:19980311T180000Z
- RDATE:19980318T180000Z
- ORGANIZER:mailto:a@example.com
- ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:mailto:a@example.com
- ATTENDEE;RSVP=TRUE:mailto:b@example.com
- SUMMARY:Review Accounts
- DTSTART:19980304T180000Z
- DTEND:19980304T200000Z
- DTSTAMP:19980303T193000Z
- LOCATION:Conference Room A
- STATUS:CONFIRMED
-
-
-
-Daboo Standards Track [Page 104]
-
-RFC 5546 iTIP December 2009
-
-
- END:VEVENT
- END:VCALENDAR
-
- Organizer changes 2nd instance location and time:
-
- BEGIN:VCALENDAR
- METHOD:REQUEST
- PRODID:-//Example/ExampleCalendarClient//EN
- VERSION:2.0
- BEGIN:VEVENT
- UID:123456789@example.com
- SEQUENCE:1
- RECURRENCE-ID:19980311T180000Z
- ORGANIZER:mailto:a@example.com
- ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:mailto:a@example.com
- ATTENDEE;RSVP=TRUE:mailto:b@example.com
- SUMMARY:Review Accounts
- DTSTART:19980311T160000Z
- DTEND:19980311T180000Z
- DTSTAMP:19980306T193000Z
- LOCATION:The Small conference room
- STATUS:CONFIRMED
- END:VEVENT
- END:VCALENDAR
-
- Organizer adds a 4th instance of the meeting using the "ADD" method.
-
- BEGIN:VCALENDAR
- METHOD:ADD
- PRODID:-//Example/ExampleCalendarClient//EN
- VERSION:2.0
- BEGIN:VEVENT
- UID:123456789@example.com
- SEQUENCE:2
- ORGANIZER:mailto:a@example.com
- ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:mailto:a@example.com
- ATTENDEE;RSVP=TRUE:mailto:b@example.com
- SUMMARY:Review Accounts
- DTSTART:19980315T180000Z
- DTEND:19980315T200000Z
- DTSTAMP:19980307T193000Z
- LOCATION:Conference Room A
- STATUS:CONFIRMED
- END:VEVENT
- END:VCALENDAR
-
-
-
-
-
-
-Daboo Standards Track [Page 105]
-
-RFC 5546 iTIP December 2009
-
-
- If "B" requests a "REFRESH", "A" responds with the following to
- capture all instance-specific data. In this case, both the initial
- request and an additional "VEVENT" that specifies the instance-
- specific data are included. Because these are both of the same type
- (they are both "VEVENTS"), they can be conveyed in the same iCalendar
- object.
-
- BEGIN:VCALENDAR
- METHOD:REQUEST
- PRODID:-//Example/ExampleCalendarClient//EN
- VERSION:2.0
- BEGIN:VEVENT
- UID:123456789@example.com
- SEQUENCE:2
- RDATE:19980304T180000Z
- RDATE:19980311T160000Z
- RDATE:19980315T180000Z
- ORGANIZER:mailto:a@example.com
- ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:mailto:a@example.com
- ATTENDEE;RSVP=TRUE:mailto:b@example.com
- SUMMARY:Review Accounts
- DTSTART:19980304T180000Z
- DTEND:19980304T200000Z
- DTSTAMP:19980303T193000Z
- LOCATION:Conference Room A
- STATUS:CONFIRMED
- END:VEVENT
- BEGIN:VEVENT
- SEQUENCE:2
- UID:123456789@example.com
- RECURRENCE-ID:19980311T160000Z
- ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:mailto:a@example.com
- ATTENDEE;RSVP=TRUE:mailto:b@example.com
- SUMMARY:Review Accounts
- DTSTART:19980311T160000Z
- DTEND:19980304T180000Z
- DTSTAMP:19980306T193000Z
- LOCATION:The Small conference room
- STATUS:CONFIRMED
- END:VEVENT
- END:VCALENDAR
-
-4.4.9. Counter an Instance of a Recurring Event
-
- In this example, one of the "Attendees" counters the "DTSTART"
- property of the proposed second July meeting.
-
-
-
-
-
-Daboo Standards Track [Page 106]
-
-RFC 5546 iTIP December 2009
-
-
- BEGIN:VCALENDAR
- METHOD:COUNTER
- PRODID:-//Example/ExampleCalendarClient//EN
- VERSION:2.0
- BEGIN:VEVENT
- UID:guid-1@example.com
- RECURRENCE-ID:19970715T210000Z
- SEQUENCE:4
- ORGANIZER:mailto:a@example.com
- ATTENDEE;ROLE=CHAIR;RSVP=TRUE:mailto:a@example.com
- ATTENDEE;RSVP=TRUE:mailto:b@example.com
- ATTENDEE;RSVP=TRUE:mailto:c@example.com
- ATTENDEE;RSVP=TRUE:mailto:d@example.com
- DESCRIPTION:IETF-C&S Conference Call
- CLASS:PUBLIC
- SUMMARY:IETF Calendaring Working Group Meeting
- DTSTART:19970715T220000Z
- DTEND:19970715T230000Z
- LOCATION:Conference Call
- COMMENT:May we bump this by an hour? I have a conflict
- DTSTAMP:19970629T094000Z
- END:VEVENT
- END:VCALENDAR
-
-4.4.10. Error Reply to a Request
-
- The following example illustrates a scenario where a meeting is
- proposed containing an unsupported property and a bad property.
-
- Original Request:
-
- BEGIN:VCALENDAR
- METHOD:REQUEST
- PRODID:-//Example/ExampleCalendarClient//EN
- VERSION:2.0
- BEGIN:VEVENT
- UID:guid-1@example.com
- SEQUENCE:0
- RRULE:FREQ=MONTHLY;BYMONTHDAY=1
- ORGANIZER:mailto:a@example.com
- ATTENDEE;ROLE=CHAIR:mailto:a@example.com
- ATTENDEE;RSVP=TRUE:mailto:b@example.com
- ATTENDEE;RSVP=TRUE:mailto:c@example.com
- ATTENDEE;RSVP=TRUE:mailto:d@example.com
- DESCRIPTION:IETF-C&S Conference Call
- CLASS:PUBLIC
- SUMMARY:IETF Calendaring Working Group Meeting
- DTSTART:19970601T210000Z
-
-
-
-Daboo Standards Track [Page 107]
-
-RFC 5546 iTIP December 2009
-
-
- DTEND:19970601T220000Z
- DTSTAMP:19970602T094000Z
- LOCATION:Conference Call
- STATUS:CONFIRMED
- FOO:BAR
- END:VEVENT
- END:VCALENDAR
-
- "B" responds to indicate that "RRULE" is not supported and that an
- unrecognized property was encountered.
-
- BEGIN:VCALENDAR
- PRODID:-//Example/ExampleCalendarClient//EN
- METHOD:REPLY
- VERSION:2.0
- BEGIN:VEVENT
- ORGANIZER:mailto:a@example.com
- ATTENDEE:mailto:b@example.com
- REQUEST-STATUS:3.0;Invalid Property Name;FOO
- UID:guid-1@example.com
- SEQUENCE:0
- DTSTAMP:19970603T094000Z
- END:VEVENT
- END:VCALENDAR
-
-4.5. Group To-Do Examples
-
- Individual "A" creates a group task in which individuals "A", "B",
- "C", and "D" will participate. Individual "B" confirms acceptance of
- the task. Individual "C" declines the task. Individual "D"
- tentatively accepts the task. The following table illustrates the
- sequence of messages that would be exchanged between these
- individuals. Individual "A" then issues a "REQUEST" method to obtain
- the status of the to-do from each participant. The response
- indicates the individual "Attendee's" completion status. The table
- below illustrates the message flow.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Daboo Standards Track [Page 108]
-
-RFC 5546 iTIP December 2009
-
-
- +--------------+------------------------+---------------------------+
- | Action | Organizer | Attendee |
- +--------------+------------------------+---------------------------+
- | Initiate a | "A" sends a REQUEST | |
- | to-do | message to "B", "C", | |
- | request | and "D". | |
- | | | |
- | Accept the | | "B" sends a REPLY message |
- | to-do | | to "A" with its PARTSTAT |
- | request | | parameter set to |
- | | | ACCEPTED. |
- | | | |
- | Decline the | | "C" sends a REPLY message |
- | to-do | | to "A" with its PARTSTAT |
- | request | | parameter set to |
- | | | DECLINED. |
- | | | |
- | Tentatively | | "D" sends a REPLY message |
- | accept the | | to "A" with its PARTSTAT |
- | to-do | | parameter set to |
- | request | | TENTATIVE. |
- | | | |
- | Check | "A" sends a REQUEST | |
- | Attendee | message to "B" and "D" | |
- | completion | with current | |
- | status | information. | |
- | | | |
- | Attendee | | "B" sends a REPLY message |
- | indicates | | indicating percent |
- | percent | | complete. |
- | complete | | |
- | | | |
- | Attendee | | "D" sends a REPLY message |
- | indicates | | indicating completion. |
- | completion | | |
- +--------------+------------------------+---------------------------+
-
-4.5.1. A VTODO Request
-
- A sample "REQUEST" for a "VTODO" calendar component that "A" sends to
- "B", "C", and "D".
-
- BEGIN:VCALENDAR
- PRODID:-//Example/ExampleCalendarClient//EN
- METHOD:REQUEST
- VERSION:2.0
- BEGIN:VTODO
- ORGANIZER:mailto:a@example.com
-
-
-
-Daboo Standards Track [Page 109]
-
-RFC 5546 iTIP December 2009
-
-
- ATTENDEE;ROLE=CHAIR:mailto:a@example.com
- ATTENDEE;RSVP=TRUE:mailto:b@example.com
- ATTENDEE;RSVP=TRUE:mailto:c@example.com
- ATTENDEE;RSVP=TRUE:mailto:d@example.com
- DTSTART:19970701T170000Z
- DUE:19970722T170000Z
- PRIORITY:1
- SUMMARY:Create the requirements document
- UID:calsrv.example.com-873970198738777-00@example.com
- SEQUENCE:0
- DTSTAMP:19970717T200000Z
- STATUS:NEEDS-ACTION
- END:VTODO
- END:VCALENDAR
-
-4.5.2. A VTODO Reply
-
- "B" accepts the to-do.
-
- BEGIN:VCALENDAR
- PRODID:-//Example/ExampleCalendarClient//EN
- METHOD:REPLY
- VERSION:2.0
- BEGIN:VTODO
- ORGANIZER:mailto:a@example.com
- ATTENDEE;PARTSTAT=ACCEPTED:mailto:b@example.com
- UID:calsrv.example.com-873970198738777-00@example.com
- COMMENT:I'll send you my input by email
- SEQUENCE:0
- DTSTAMP:19970717T203000Z
- REQUEST-STATUS:2.0;Success
- END:VTODO
- END:VCALENDAR
-
- "B" could have declined the "VTODO" or indicated tentative acceptance
- by setting the "PARTSTAT" property parameter sequence to "DECLINED"
- or "TENTATIVE", respectively.
-
-4.5.3. A VTODO Request for Updated Status
-
- "A" requests status from all "Attendees".
-
- BEGIN:VCALENDAR
- PRODID:-//Example/ExampleCalendarClient//EN
- METHOD:REQUEST
- VERSION:2.0
- BEGIN:VTODO
- ORGANIZER:mailto:a@example.com
-
-
-
-Daboo Standards Track [Page 110]
-
-RFC 5546 iTIP December 2009
-
-
- ATTENDEE;ROLE=CHAIR:mailto:a@example.com
- ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:mailto:b@example.com
- ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:mailto:d@example.com
- UID:calsrv.example.com-873970198738777-00@example.com
- SUMMARY:Create the requirements document
- PRIORITY:1
- SEQUENCE:0
- STATUS:IN-PROCESS
- DTSTART:19970701T170000Z
- DTSTAMP:19970717T230000Z
- END:VTODO
- END:VCALENDAR
-
-4.5.4. A Reply: Percent-Complete
-
- A reply indicating the task being worked on and that "B" is 75%
- complete with "B's" part of the assignment.
-
- BEGIN:VCALENDAR
- PRODID:-//Example/ExampleCalendarClient//EN
- METHOD:REPLY
- VERSION:2.0
- BEGIN:VTODO
- ORGANIZER:mailto:a@example.com
- ATTENDEE;PARTSTAT=IN-PROCESS:mailto:b@example.com
- PERCENT-COMPLETE:75
- UID:calsrv.example.com-873970198738777-00@example.com
- DTSTAMP:19970717T233000Z
- SEQUENCE:0
- END:VTODO
- END:VCALENDAR
-
-4.5.5. A Reply: Completed
-
- A reply indicating that "D" completed "D's" part of the assignment.
-
- BEGIN:VCALENDAR
- PRODID:-//Example/ExampleCalendarClient//EN
- METHOD:REPLY
- VERSION:2.0
- BEGIN:VTODO
- ORGANIZER:mailto:a@example.com
- ATTENDEE;PARTSTAT=COMPLETED:mailto:d@example.com
- UID:calsrv.example.com-873970198738777-00@example.com
- DTSTAMP:19970717T233000Z
- SEQUENCE:0
- END:VTODO
- END:VCALENDAR
-
-
-
-Daboo Standards Track [Page 111]
-
-RFC 5546 iTIP December 2009
-
-
-4.5.6. An Updated VTODO Request
-
- "Organizer" "A" resends the "VTODO" calendar component. "A" sets the
- overall completion for the to-do at 40%.
-
- BEGIN:VCALENDAR
- PRODID:-//Example/ExampleCalendarClient//EN
- METHOD:REQUEST
- VERSION:2.0
- BEGIN:VTODO
- ORGANIZER:mailto:a@example.com
- ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:mailto:a@example.com
- ATTENDEE;PARTSTAT=ACCEPTED;CUTYPE=INDIVIDUAL:mailto:b@example.com
- ATTENDEE;PARTSTAT=COMPLETED;CUTYPE=INDIVIDUAL:mailto:d@example.com
- DTSTART:19970701T170000Z
- DUE:19970722T170000Z
- PRIORITY:1
- SUMMARY:Create the requirements document
- UID:calsrv.example.com-873970198738777-00@example.com
- SEQUENCE:1
- DTSTAMP:19970718T100000Z
- STATUS:IN-PROCESS
- PERCENT-COMPLETE:40
- END:VTODO
- END:VCALENDAR
-
-4.5.7. Recurring VTODOs
-
- The following examples relate to recurring "VTODO" calendar
- components.
-
-4.5.7.1. Request for a Recurring VTODO
-
- In this example, "A" sends a recurring "VTODO" calendar component to
- "B" and "D".
-
- BEGIN:VCALENDAR
- PRODID:-//Example/ExampleCalendarClient//EN
- METHOD:REQUEST
- VERSION:2.0
- BEGIN:VTODO
- ORGANIZER:mailto:a@example.com
- ATTENDEE;ROLE=CHAIR:mailto:a@example.com
- ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:mailto:b@example.com
- ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:mailto:d@example.com
- RRULE:FREQ=MONTHLY;COUNT=10;BYDAY=1FR
- DTSTART:19980101T100000Z
- DUE:19980103T100000Z
-
-
-
-Daboo Standards Track [Page 112]
-
-RFC 5546 iTIP December 2009
-
-
- SUMMARY:Send Status Reports to Area Managers
- UID:calsrv.example.com-873970198738777-00@example.com
- SEQUENCE:0
- DTSTAMP:19970717T200000Z
- STATUS:NEEDS-ACTION
- PRIORITY:1
- END:VTODO
- END:VCALENDAR
-
-4.5.7.2. Replying to an Instance of a Recurring VTODO
-
- In this example, "B" updates "A" on a single instance of the "VTODO"
- calendar component.
-
- BEGIN:VCALENDAR
- PRODID:-//Example/ExampleCalendarClient//EN
- METHOD:REPLY
- VERSION:2.0
- BEGIN:VTODO
- ATTENDEE;PARTSTAT=IN-PROCESS:mailto:b@example.com
- PERCENT-COMPLETE:75
- UID:calsrv.example.com-873970198738777-00@example.com
- DTSTAMP:19970717T233000Z
- RECURRENCE-ID:19980101T170000Z
- SEQUENCE:1
- END:VTODO
- END:VCALENDAR
-
-4.6. Journal Examples
-
- The iCalendar object below describes a single journal entry for
- October 2, 1997. The "RELATED-TO" property references the phone
- conference event for which minutes were taken.
-
- BEGIN:VCALENDAR
- METHOD:PUBLISH
- PRODID:-//Example/ExampleCalendarClient//EN
- VERSION:2.0
- BEGIN:VJOURNAL
- DTSTART:19971002T200000Z
- DTSTAMP:19970717T233100Z
- ORGANIZER:mailto:a@example.com
- SUMMARY:Phone conference minutes
- DESCRIPTION:The editors meeting was held on October 1, 1997.
- Details are in the attached document.
- UID:0981234-1234234-2410@example.com
- RELATED-TO:0981234-1234234-2402-35@example.com
- ATTACH:ftp://ftp.example.com/pub/ed/minutes100197.txt
-
-
-
-Daboo Standards Track [Page 113]
-
-RFC 5546 iTIP December 2009
-
-
- END:VJOURNAL
- END:VCALENDAR
-
-4.7. Other Examples
-
-4.7.1. Event Refresh
-
- Refresh the event with a "UID" property value of
- "guid-1-12345@example.com":
-
- BEGIN:VCALENDAR
- PRODID:-//Example/ExampleCalendarClient//EN
- METHOD:REFRESH
- VERSION:2.0
- BEGIN:VEVENT
- ORGANIZER:mailto:a@example.com
- ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:mailto:a@example.com
- ATTENDEE:mailto:b@example.com
- ATTENDEE:mailto:c@example.com
- ATTENDEE:mailto:d@example.com
- UID:guid-1-12345@example.com
- DTSTAMP:19970603T094000
- END:VEVENT
- END:VCALENDAR
-
-4.7.2. Bad RECURRENCE-ID
-
- Component instances are identified by the combination of "UID",
- "RECURRENCE-ID", and "SEQUENCE". When an "Organizer" sends an iTIP
- message to an "Attendee", there are three cases in which an instance
- cannot be found. They are:
-
- 1. The component with the referenced "UID" and "RECURRENCE-ID" has
- been found but the "SEQUENCE" number in the calendar store does
- not match that of the iTIP message.
-
- 2. The component with the referenced "UID" has been found, the
- "SEQUENCE" numbers match, but the "RECURRENCE-ID" cannot be
- found.
-
- 3. The "UID" and "SEQUENCE" numbers are found but the CUA does not
- support recurrences.
-
- In case (1), two things can happen. If the "SEQUENCE" number of the
- "Attendee's" instance is larger than that in the "Organizer's"
- message, then the "Attendee" is receiving an out-of-sequence message
- and MUST ignore it. If the "SEQUENCE" number of the "Attendee's"
- instance is smaller, then the "Organizer" is sending out a newer
-
-
-
-Daboo Standards Track [Page 114]
-
-RFC 5546 iTIP December 2009
-
-
- version of the component and the "Attendee's" version needs to be
- updated. Since one or more updates have been missed, the "Attendee"
- SHOULD send a "REFRESH" message to the "Organizer" to get an updated
- version of the event.
-
- In case (2), something has gone wrong. Both the "Organizer" and the
- "Attendee" should have the same instances, but the "Attendee" does
- not have the referenced instance. In this case, the "Attendee"
- SHOULD send a "REFRESH" to the "Organizer" to get an updated version
- of the event.
-
- In case (3), the limitations of the "Attendee's" CUA makes it
- impossible to match an instance other than the single instance
- scheduled. In this case, the "Attendee" need not send a "REFRESH" to
- the "Organizer".
-
- The example below shows a sequence in which an "Attendee" sends a
- "REFRESH" to the "Organizer".
-
- +-------------------------+--------------------+--------------------+
- | Action | Organizer | Attendee |
- +-------------------------+--------------------+--------------------+
- | Update an instance | "A" sends REQUEST | |
- | request | message to "B". | |
- | | | |
- | Attendee requests | | "B" sends a |
- | refresh because | | REFRESH message to |
- | RECURRENCE-ID was not | | "A". |
- | found | | |
- | | | |
- | Refresh the entire | "A" sends the | |
- | event | latest copy of the | |
- | | event to "B" | |
- | | | |
- | Attendee handles the | | "B" updates to the |
- | request and updates the | | latest copy of the |
- | instance | | meeting. |
- +-------------------------+--------------------+--------------------+
-
- Request from "A":
-
- BEGIN:VCALENDAR
- METHOD:REQUEST
- PRODID:-//Example/ExampleCalendarClient//EN
- VERSION:2.0
- BEGIN:VEVENT
- UID:example-12345@example.com
- SEQUENCE:3
-
-
-
-Daboo Standards Track [Page 115]
-
-RFC 5546 iTIP December 2009
-
-
- RRULE:FREQ=WEEKLY
- RDATE;VALUE=PERIOD:19970819T210000Z/199700819T220000Z
- ORGANIZER:mailto:a@example.com
- ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:mailto:a@example.com
- ATTENDEE:mailto:b@example.com
- DESCRIPTION:IETF-C&S Conference Call
- SUMMARY:IETF Calendaring Working Group Meeting
- DTSTART:19970801T210000Z
- DTEND:19970801T220000Z
- RECURRENCE-ID:19970809T210000Z
- DTSTAMP:19970726T083000
- STATUS:CONFIRMED
- END:VEVENT
- END:VCALENDAR
-
- "B" has the event with "UID" property "example-12345@example.com",
- but "B's" "SEQUENCE" property value is "1" and the event does not
- have an instance at the specified recurrence time. This means that
- "B" has missed at least one update and needs a new copy of the event.
- "B" requests the latest copy of the event with the following refresh
- message:
-
- BEGIN:VCALENDAR
- PRODID:-//Example/ExampleCalendarClient//EN
- METHOD:REFRESH
- VERSION:2.0
- BEGIN:VEVENT
- ORGANIZER:mailto:a@example.com
- ATTENDEE:mailto:b@example.com
- UID:example-12345@example.com
- DTSTAMP:19970603T094000
- END:VEVENT
- END:VCALENDAR
-
-5. Application Protocol Fallbacks
-
-5.1. Partial Implementation
-
- Applications that support this specification are not required to
- support the entire protocol. The following describes how methods and
- properties SHOULD "fallback" in applications that do not support the
- complete protocol. If a method or property is not addressed in this
- section, it may be ignored.
-
-
-
-
-
-
-
-
-Daboo Standards Track [Page 116]
-
-RFC 5546 iTIP December 2009
-
-
-5.1.1. Event-Related Fallbacks
-
- +----------------+--------------------------------------------------+
- | Method | Fallback |
- +----------------+--------------------------------------------------+
- | PUBLISH | Required |
- | REQUEST | PUBLISH |
- | REPLY | Required |
- | ADD | Required if recurrences supported; otherwise, |
- | | reply with a REQUEST-STATUS "2.8; Success, |
- | | repeating event ignored. Scheduled as a single |
- | | component", and schedule as a single component. |
- | CANCEL | Required |
- | REFRESH | Required |
- | COUNTER | Reply with "Not Supported". |
- | DECLINECOUNTER | Required if COUNTER is implemented for VEVENTs; |
- | | otherwise, reply with "Not Supported". |
- +----------------+--------------------------------------------------+
-
- +-----------------+-------------------------------------------------+
- | iCalendar | Fallback |
- | Property | |
- +-----------------+-------------------------------------------------+
- | CALSCALE | Ignore - assume GREGORIAN. |
- | PRODID | Ignore |
- | METHOD | Required as described in the Method list above. |
- | VERSION | Ignore |
- +-----------------+-------------------------------------------------+
-
- +-----------------+-------------------------------------------------+
- | Event-Related | Fallback |
- | Components | |
- +-----------------+-------------------------------------------------+
- | VALARM | Reply with "Not Supported". |
- | VTIMEZONE | Required if any DateTime value refers to a time |
- | | zone. |
- +-----------------+-------------------------------------------------+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Daboo Standards Track [Page 117]
-
-RFC 5546 iTIP December 2009
-
-
- +-----------------+-------------------------------------------------+
- | Component | Fallback |
- | Property | |
- +-----------------+-------------------------------------------------+
- | ATTACH | Ignore |
- | ATTENDEE | Required if METHOD is REQUEST; otherwise, |
- | | ignore. |
- | CATEGORIES | Ignore |
- | CLASS | Ignore |
- | COMMENT | Ignore |
- | COMPLETED | Ignore |
- | CONTACT | Ignore |
- | CREATED | Ignore |
- | DESCRIPTION | Ignore |
- | DURATION | Required |
- | DTSTAMP | Required |
- | DTSTART | Required |
- | DTEND | Required |
- | EXDATE | Ignore |
- | GEO | Ignore |
- | LAST-MODIFIED | Ignore |
- | LOCATION | Required |
- | ORGANIZER | Required if METHOD is REQUEST; otherwise, |
- | | ignore. |
- | PRIORITY | Ignore |
- | RELATED-TO | Ignore |
- | RDATE | Ignore |
- | RRULE | Ignore - assume the first instance occurs on |
- | | the DTSTART property. If implemented, |
- | | VTIMEZONE MUST also be implemented. |
- | RECURRENCE-ID | Required if RRULE is implemented; otherwise, |
- | | ignore. |
- | REQUEST-STATUS | Required |
- | RESOURCES | Ignore |
- | SEQUENCE | Required |
- | STATUS | Ignore |
- | SUMMARY | Ignore |
- | TRANSP | Required if FREEBUSY is implemented; otherwise, |
- | | ignore. |
- | URL | Ignore |
- | UID | Required |
- | X- | Ignore |
- +-----------------+-------------------------------------------------+
-
-
-
-
-
-
-
-
-Daboo Standards Track [Page 118]
-
-RFC 5546 iTIP December 2009
-
-
-5.1.2. Free/Busy-Related Fallbacks
-
- +---------+---------------------------------------------------------+
- | Method | Fallback |
- +---------+---------------------------------------------------------+
- | PUBLISH | Required if freebusy lookups are supported; otherwise, |
- | | reply with a REQUEST-STATUS "3.14; Unsupported |
- | | capability". |
- | REQUEST | Required if freebusy lookups are supported; otherwise, |
- | | reply with a REQUEST-STATUS "3.14; Unsupported |
- | | capability". |
- | REPLY | Required if freebusy lookups are supported; otherwise, |
- | | reply with a REQUEST-STATUS "3.14; Unsupported |
- | | capability". |
- +---------+---------------------------------------------------------+
-
- +-----------------+-------------------------------------------------+
- | iCalendar | Fallback |
- | Property | |
- +-----------------+-------------------------------------------------+
- | CALSCALE | Ignore - assume GREGORIAN. |
- | PRODID | Ignore |
- | METHOD | Required as described in the Method list above. |
- | VERSION | Ignore |
- +-----------------+-------------------------------------------------+
-
- +-----------------+-------------------------------------------------+
- | Component | Fallback |
- | Property | |
- +-----------------+-------------------------------------------------+
- | ATTENDEE | Required if METHOD is REQUEST; otherwise, |
- | | ignore. |
- | COMMENT | Ignore |
- | CONTACT | Ignore |
- | DTEND | Required |
- | DTSTAMP | Required |
- | DTSTART | Required |
- | DURATION | Ignore |
- | FREEBUSY | Required |
- | ORGANIZER | Required if METHOD is REQUEST; otherwise, |
- | | ignore. |
- | REQUEST-STATUS | Ignore |
- | UID | Required |
- | URL | Ignore |
- | X- | Ignore |
- +-----------------+-------------------------------------------------+
-
-
-
-
-
-Daboo Standards Track [Page 119]
-
-RFC 5546 iTIP December 2009
-
-
-5.1.3. To-Do-Related Fallbacks
-
- +----------------+--------------------------------------------------+
- | Method | Fallback |
- +----------------+--------------------------------------------------+
- | PUBLISH | Required |
- | REQUEST | PUBLISH |
- | REPLY | Required |
- | ADD | Required if recurrences supported; otherwise, |
- | | reply with a REQUEST-STATUS "2.8; Success, |
- | | repeating event ignored. Scheduled as a single |
- | | component", and schedule as a single component. |
- | CANCEL | Required |
- | REFRESH | Required |
- | COUNTER | Reply with "Not Supported". |
- | DECLINECOUNTER | Required if COUNTER for VTODOs is implemented; |
- | | otherwise, reply with "Not Supported". |
- +----------------+--------------------------------------------------+
-
- +-----------------+-------------------------------------------------+
- | iCalendar | Fallback |
- | Property | |
- +-----------------+-------------------------------------------------+
- | CALSCALE | Ignore - assume GREGORIAN. |
- | PRODID | Ignore |
- | METHOD | Required as described in the Method list above. |
- | VERSION | Ignore |
- +-----------------+-------------------------------------------------+
-
- +-----------------+-------------------------------------------------+
- | To-Do-Related | Fallback |
- | Components | |
- +-----------------+-------------------------------------------------+
- | VALARM | Reply with "Not Supported". |
- | VTIMEZONE | Required if any DateTime value refers to a time |
- | | zone. |
- +-----------------+-------------------------------------------------+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Daboo Standards Track [Page 120]
-
-RFC 5546 iTIP December 2009
-
-
- +------------------+------------------------------------------------+
- | Component | Fallback |
- | Property | |
- +------------------+------------------------------------------------+
- | ATTACH | Ignore |
- | ATTENDEE | Required if METHOD is REQUEST; otherwise, |
- | | ignore. |
- | CATEGORIES | Ignore |
- | CLASS | Ignore |
- | COMMENT | Ignore |
- | COMPLETED | Required |
- | CONTACT | Ignore |
- | CREATED | Ignore |
- | DESCRIPTION | Required if METHOD is REQUEST; otherwise, |
- | | ignore. |
- | DUE | Required |
- | DURATION | Required |
- | DTSTAMP | Required |
- | DTSTART | Required |
- | EXDATE | Ignore - reply with "Not Supported". |
- | LAST-MODIFIED | Ignore |
- | LOCATION | Ignore |
- | ORGANIZER | Required if METHOD is REQUEST; otherwise, |
- | | ignore. |
- | PERCENT-COMPLETE | Ignore |
- | PRIORITY | Required |
- | RECURRENCE-ID | Required if RRULE is implemented; otherwise, |
- | | ignore. |
- | RELATED-TO | Ignore |
- | REQUEST-STATUS | Ignore |
- | RDATE | Ignore |
- | RRULE | Ignore - assume the first instance occurs on |
- | | the DTSTART property. If implemented, |
- | | VTIMEZONE MUST also be implemented. |
- | RESOURCES | Ignore |
- | SEQUENCE | Required |
- | STATUS | Required |
- | SUMMARY | Ignore |
- | URL | Ignore |
- | UID | Required |
- | X- | Ignore |
- +------------------+------------------------------------------------+
-
-
-
-
-
-
-
-
-
-Daboo Standards Track [Page 121]
-
-RFC 5546 iTIP December 2009
-
-
-5.1.4. Journal-Related Fallbacks
-
- +---------+---------------------------------------------------------+
- | Method | Fallback |
- +---------+---------------------------------------------------------+
- | PUBLISH | Implementations MAY ignore the METHOD type. The |
- | | REQUEST-STATUS "3.14; Unsupported capability" MUST be |
- | | returned. |
- | ADD | Implementations MAY ignore the METHOD type. The |
- | | REQUEST-STATUS "3.14; Unsupported capability" MUST be |
- | | returned. |
- | CANCEL | Implementations MAY ignore the METHOD type. The |
- | | REQUEST-STATUS "3.14; Unsupported capability" MUST be |
- | | returned. |
- +---------+---------------------------------------------------------+
-
- +-----------------+-------------------------------------------------+
- | iCalendar | Fallback |
- | Property | |
- +-----------------+-------------------------------------------------+
- | CALSCALE | Ignore - assume GREGORIAN. |
- | PRODID | Ignore |
- | METHOD | Required as described in the Method list above. |
- | VERSION | Ignore |
- +-----------------+-------------------------------------------------+
-
- +-----------------+-------------------------------------------------+
- | Journal-Related | Fallback |
- | Components | |
- +-----------------+-------------------------------------------------+
- | VTIMEZONE | Required if any DateTime value refers to a time |
- | | zone. |
- +-----------------+-------------------------------------------------+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Daboo Standards Track [Page 122]
-
-RFC 5546 iTIP December 2009
-
-
- +-----------------+-------------------------------------------------+
- | Component | Fallback |
- | Property | |
- +-----------------+-------------------------------------------------+
- | ATTACH | Ignore |
- | ATTENDEE | Ignore |
- | CATEGORIES | Ignore |
- | CLASS | Ignore |
- | COMMENT | Ignore |
- | CONTACT | Ignore |
- | CREATED | Ignore |
- | DESCRIPTION | Ignore |
- | DTSTAMP | Required |
- | DTSTART | Required |
- | EXDATE | Ignore |
- | LAST-MODIFIED | Ignore |
- | ORGANIZER | Ignore |
- | RECURRENCE-ID | Required if RRULE is implemented; otherwise, |
- | | ignore. |
- | RELATED-TO | Ignore |
- | RDATE | Ignore |
- | RRULE | Ignore - assume the first instance occurs on |
- | | the DTSTART property. If implemented, |
- | | VTIMEZONE MUST also be implemented. |
- | SEQUENCE | Required |
- | STATUS | Ignore |
- | SUMMARY | Required |
- | URL | Ignore |
- | UID | Required |
- | X- | Ignore |
- +-----------------+-------------------------------------------------+
-
-5.2. Latency Issues
-
- With a store-and-forward transport, it is possible for events to
- arrive out of sequence. That is, a "CANCEL" method may be received
- prior to receiving the associated "REQUEST" for the calendar
- component. This section discusses a few of these scenarios.
-
-5.2.1. Cancellation of an Unknown Calendar Component
-
- When a "CANCEL" method is received before the original "REQUEST"
- method, the calendar will be unable to correlate the "UID" property
- of the cancellation with an existing calendar component. It is
- suggested that messages that cannot be correlated and that also
- contain non-zero sequence numbers be held and not discarded.
- Implementations MAY age them out if no other messages arrive with the
- same "UID" property value and a lower sequence number.
-
-
-
-Daboo Standards Track [Page 123]
-
-RFC 5546 iTIP December 2009
-
-
-5.2.2. Unexpected Reply from an Unknown Delegate
-
- When an "Attendee" delegates an item to another CU, they MUST send a
- "REPLY" method to the "Organizer" using the "ATTENDEE" properties to
- indicate that the request was delegated and to whom. Hence, it is
- possible for an "Organizer" to receive a "REPLY" from a CU not listed
- as one of the original "Attendees". The resolution is left to the
- implementation, but it is expected that the calendaring software will
- either accept the reply or hold it until the related "REPLY" method
- is received from the "Delegator". If the version of the "REPLY"
- method is out of date, the "Organizer" SHOULD treat the message as a
- "REFRESH" message and update the "Delegate" with the correct version,
- provided that delegation to that delegate is acceptable.
-
-5.3. Sequence Number
-
- Under some conditions, a CUA may receive requests and replies with
- the same "SEQUENCE" property value. The "DTSTAMP" property is
- utilized as a tie-breaker when two items with the same "SEQUENCE"
- property value are evaluated.
-
-6. Security Considerations
-
- iTIP is an abstract transport protocol that will be bound to a real-
- time transport, a store-and-forward transport, and perhaps other
- transports. The transport protocol will be responsible for providing
- facilities for authentication and encryption using standard Internet
- mechanisms that are mutually understood between the sender and
- receiver.
-
-6.1. Security Threats
-
-6.1.1. Spoofing the Organizer
-
- In iTIP, the "Organizer" (or someone working on the "Organizer's"
- behalf) is the only person authorized to make changes to an existing
- "VEVENT", "VTODO", or "VJOURNAL" calendar component and republish it
- or redistribute updates to the "Attendees". An iCalendar object that
- maliciously changes or cancels an existing "VEVENT", "VTODO", or
- "VJOURNAL" calendar component may be constructed by someone other
- than the "Organizer" and republished or sent to the "Attendees".
-
-6.1.2. Spoofing the Attendee
-
- In iTIP, an "Attendee" of a "VEVENT" or "VTODO" calendar component
- (or someone working on the "Attendee's" behalf) is the only person
- authorized to update any parameter associated with their "ATTENDEE"
-
-
-
-
-Daboo Standards Track [Page 124]
-
-RFC 5546 iTIP December 2009
-
-
- property and send it to the "Organizer". An iCalendar object that
- maliciously changes the "ATTENDEE" parameters may be constructed by
- someone other than the real "Attendee" and sent to the "Organizer".
-
-6.1.3. Unauthorized Replacement of the Organizer
-
- There will be circumstances when "Attendees" of an event or to-do
- decide, using out-of-band mechanisms, that the "Organizer" must be
- replaced. When the new "Organizer" sends out the updated "VEVENT" or
- "VTODO", the "Attendee's" CUA will detect that the "Organizer" has
- been changed, but it has no way of knowing whether or not the change
- was mutually agreed upon.
-
-6.1.4. Eavesdropping and Data Integrity
-
- The iCalendar object is constructed with human-readable clear text.
- Any information contained in an iCalendar object may be read and/or
- changed by unauthorized persons while the object is in transit.
-
-6.1.5. Flooding a Calendar
-
- Implementations could provide a means to automatically incorporate
- "REQUEST" methods into a calendar. This presents the opportunity for
- a calendar to be flooded with requests, which effectively blocks all
- the calendar's free time.
-
-6.1.6. Unauthorized REFRESH Requests
-
- It is possible for an "Organizer" to receive a "REFRESH" request from
- someone who is not an "Attendee" of an event or to-do. Only
- "Attendees" of an event or to-do are authorized to receive replies to
- "REFRESH" requests. Replying to such requests to anyone who is not
- an "Attendee" may be a security problem.
-
-6.2. Recommendations
-
- For an application where the information is sensitive or critical and
- the network is subject to a high probability of attack, iTIP
- transactions SHOULD be encrypted and authenticated. This helps
- mitigate the threats of spoofing, eavesdropping, and malicious
- changes in transit.
-
-6.2.1. Securing iTIP transactions
-
- iTIP transport bindings MUST provide a mechanism to enable
- authentication of the sender's identity as well as privacy and
- integrity of the data being transmitted. This allows the receiver of
- a signed iCalendar object to verify the identity of the sender. This
-
-
-
-Daboo Standards Track [Page 125]
-
-RFC 5546 iTIP December 2009
-
-
- sender may then be correlated to an "ATTENDEE" property in the
- iCalendar object. If the correlation is made and the sender is
- authorized to make the requested change or update, then the operation
- may proceed. It also allows the message to be encrypted to prevent
- unauthorized reading of the message contents in transit. iTIP
- transport binding documents describe this process in detail.
-
-6.2.2. Implementation Controls
-
- The threat of unauthorized replacement of the "Organizer" SHOULD be
- mitigated by a calendar system that uses this protocol by providing
- controls or alerts that make "Calendar Users" aware of such
- "Organizer" changes and allowing them to decide whether or not the
- request should be honored.
-
- The threat of flooding a calendar SHOULD be mitigated by a calendar
- system that uses this protocol by providing controls that may be used
- to limit the acceptable sources for iTIP transactions, and perhaps
- the size of messages and volume of traffic, by source.
-
- The threat of unauthorized "REFRESH" requests SHOULD be mitigated by
- a calendar system that uses this protocol by providing controls or
- alerts that allow "Calendar Users" to decide whether or not the
- request should be honored. An implementation MAY decide to maintain,
- for audit or historical purposes, "Calendar Users" who were part of
- an "Attendee" list and who were subsequently uninvited. Similar
- controls or alerts should be provided when a "REFRESH" request is
- received from these "Calendar Users" as well.
-
-6.2.3. Access Controls and Filtering
-
- In many environments, there could be restrictions on who is allowed
- to schedule with whom and who the allowed delegates are for
- particular "Calendar Users".
-
- iTIP transport bindings SHOULD provide mechanisms for implementing
- access controls or filtering to ensure iTIP transactions only take
- place between authorized "Calendar Users". That would include
- preventing one "Calendar User" from scheduling with another or one
- "Calendar User" delegating to another.
-
-6.3. Privacy Issues
-
- The "Organizer" might want to keep "Attendees" from knowing which
- other "Attendees" are participating in an event or to-do. The
- "Organizer" has the choice of sending single iTIP messages with a
- full list of "Attendees" or sending iTIP messages to each "Attendee"
- with only that "Attendee" listed.
-
-
-
-Daboo Standards Track [Page 126]
-
-RFC 5546 iTIP December 2009
-
-
-7. IANA Considerations
-
-7.1. Registration Template for REQUEST-STATUS Values
-
- This specification updates [RFC5545] by adding a "REQUEST-STATUS"
- value registry to the iCalendar Elements registry.
-
- A "REQUEST-STATUS" value is defined by completing the following
- template.
-
- Status Code: Hierarchical, numeric return status code, following
- the rules defined in Section 3.8.8.3 of [RFC5545].
-
- Status Description: Textual status description. A short but
- clear description of the error.
-
- Status Exception Data: Textual exception data. A short but clear
- description of what might appear in this field.
-
- Description: Describe the underlying cause for this status code
- value.
-
-7.2. Additions to iCalendar METHOD Registry
-
- This document defines the following values for the iCalendar "METHOD"
- property, using the values template from Section 8.2.6 of [RFC5545].
- These should be added to the Methods Registry defined in Section
- 8.3.12 of [RFC5545]:
-
-7.2.1. METHOD:PUBLISH
-
- Value: PUBLISH
-
- Purpose: Standard iTIP "METHOD" value.
-
- Conformance: Only used with the "METHOD" property.
-
- Examples: See this RFC.
-
-7.2.2. METHOD:REQUEST
-
- Value: REQUEST
-
- Purpose: Standard iTIP "METHOD" value.
-
- Conformance: Only used with the "METHOD" property.
-
- Examples: See this RFC.
-
-
-
-Daboo Standards Track [Page 127]
-
-RFC 5546 iTIP December 2009
-
-
-7.2.3. METHOD:REPLY
-
- Value: REPLY
-
- Purpose: Standard iTIP "METHOD" value.
-
- Conformance: Only used with the "METHOD" property.
-
- Examples: See this RFC.
-
-7.2.4. METHOD:ADD
-
- Value: ADD
-
- Purpose: Standard iTIP "METHOD" value.
-
- Conformance: Only used with the "METHOD" property.
-
- Examples: See this RFC.
-
-7.2.5. METHOD:CANCEL
-
- Value: CANCEL
-
- Purpose: Standard iTIP "METHOD" value.
-
- Conformance: Only used with the "METHOD" property.
-
- Examples: See this RFC.
-
-7.2.6. METHOD:REFRESH
-
- Value: REFRESH
-
- Purpose: Standard iTIP "METHOD" value.
-
- Conformance: Only used with the "METHOD" property.
-
- Examples: See this RFC.
-
-7.2.7. METHOD:COUNTER
-
- Value: COUNTER
-
- Purpose: Standard iTIP "METHOD" value.
-
- Conformance: Only used with the "METHOD" property.
-
-
-
-
-Daboo Standards Track [Page 128]
-
-RFC 5546 iTIP December 2009
-
-
- Examples: See this RFC.
-
-7.2.8. METHOD:DECLINECOUNTER
-
- Value: DECLINECOUNTER
-
- Purpose: Standard iTIP "METHOD" value.
-
- Conformance: Only used with the "METHOD" property.
-
- Examples: See this RFC.
-
-7.3. REQUEST-STATUS Value Registry
-
- New "REQUEST-STATUS" values can be registered using the process
- described in Section 8.2.1 of [RFC5545].
-
- The following table is to be used to initialize the "REQUEST-STATUS"
- value registry.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Daboo Standards Track [Page 129]
-
-RFC 5546 iTIP December 2009
-
-
- +-------------+---------+--------------------------+
- | Status Code | Status | Reference |
- +-------------+---------+--------------------------+
- | 2.0 | Current | RFC 5546, Section 3.6.1 |
- | 2.1 | Current | RFC 5546, Section 3.6.2 |
- | 2.2 | Current | RFC 5546, Section 3.6.3 |
- | 2.3 | Current | RFC 5546, Section 3.6.4 |
- | 2.4 | Current | RFC 5546, Section 3.6.5 |
- | 2.5 | Current | RFC 5546, Section 3.6.6 |
- | 2.6 | Current | RFC 5546, Section 3.6.7 |
- | 2.7 | Current | RFC 5546, Section 3.6.8 |
- | 2.8 | Current | RFC 5546, Section 3.6.9 |
- | 2.9 | Current | RFC 5546, Section 3.6.10 |
- | 2.10 | Current | RFC 5546, Section 3.6.11 |
- | 2.11 | Current | RFC 5546, Section 3.6.12 |
- | 3.0 | Current | RFC 5546, Section 3.6.13 |
- | 3.1 | Current | RFC 5546, Section 3.6.14 |
- | 3.2 | Current | RFC 5546, Section 3.6.15 |
- | 3.3 | Current | RFC 5546, Section 3.6.16 |
- | 3.4 | Current | RFC 5546, Section 3.6.17 |
- | 3.5 | Current | RFC 5546, Section 3.6.18 |
- | 3.6 | Current | RFC 5546, Section 3.6.19 |
- | 3.7 | Current | RFC 5546, Section 3.6.20 |
- | 3.8 | Current | RFC 5546, Section 3.6.21 |
- | 3.9 | Current | RFC 5546, Section 3.6.22 |
- | 3.10 | Current | RFC 5546, Section 3.6.23 |
- | 3.11 | Current | RFC 5546, Section 3.6.24 |
- | 3.12 | Current | RFC 5546, Section 3.6.25 |
- | 3.13 | Current | RFC 5546, Section 3.6.26 |
- | 3.14 | Current | RFC 5546, Section 3.6.27 |
- | 4.0 | Current | RFC 5546, Section 3.6.28 |
- | 5.0 | Current | RFC 5546, Section 3.6.29 |
- | 5.1 | Current | RFC 5546, Section 3.6.30 |
- | 5.2 | Current | RFC 5546, Section 3.6.31 |
- | 5.3 | Current | RFC 5546, Section 3.6.32 |
- +-------------+---------+--------------------------+
-
-8. Acknowledgments
-
- This is an update to the original iTIP document authored by S.
- Silverberg, S. Mansour, F. Dawson, and R. Hopson.
-
- This revision is the product of the Calsify IETF Working Group, and
- several participants have made important contributions to this
- specification, including Oliver Block, Bernard Desruisseaux, Mike
- Douglass, Tim Hare, Ciny Joy, Bruce Kahn, Reinhold Kainhofer, Eliot
- Lear, Jonathan Lennox, Andy Mabbett, Aki Niemi, John W. Noerenberg
- II, Robert Ransdell, and Caleb Richardson.
-
-
-
-Daboo Standards Track [Page 130]
-
-RFC 5546 iTIP December 2009
-
-
-9. References
-
-9.1. Normative References
-
- [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
- Requirement Levels", BCP 14, RFC 2119, March 1997.
-
- [RFC2368] Hoffman, P., Masinter, L., and J. Zawinski, "The mailto
- URL scheme", RFC 2368, July 1998.
-
- [RFC5545] Desruisseaux, B., "Internet Calendaring and Scheduling
- Core Object Specification (iCalendar)", RFC 5545,
- September 2009.
-
-9.2. Informative References
-
- [iMIP] Melnikov, A., Ed., "iCalendar Message-Based
- Interoperability Protocol (iMIP)", Work in Progress,
- October 2009.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Daboo Standards Track [Page 131]
-
-RFC 5546 iTIP December 2009
-
-
-Appendix A. Differences from RFC 2446
-
-A.1. Changed Restrictions
-
- This specification now defines an allowed combination of "REQUEST-
- STATUS" codes when multiple iCalendar components are included in an
- iTIP message.
-
- This specification now restricts "RECURRENCE-ID" to only a single
- occurrence in any one iCalendar component in an iTIP message, as
- required by [RFC5545].
-
- Changed the "RECURRENCE-ID" entry in the component restriction table
- to "0 or 1" from "0+", to fall in line with [RFC5545].
-
- Changed the "FREEBUSY" entry in the "VFREEBUSY", "PUBLISH", and
- "REPLY" restriction tables to "0+" from "1+", to fall in line with
- [RFC5545].
-
- Changed the "FREEBUSY" description in the "VFREEBUSY" and "REPLY"
- restriction tables to indicate that different "FBTYPE" ranges MUST
- NOT overlap.
-
- Changed the "TZNAME" entry in the "VTIMEZONE" restriction table to
- "0+" from "0 or 1", to fall in line with [RFC5545].
-
- Changed the "COMMENT" entry in the component restriction tables to
- "0+" from "0 or 1", to fall in line with [RFC5545].
-
- Added the "ATTENDEE" entry in the "VALARM" restriction table to match
- the email alarm type in [RFC5545].
-
- Changed the "CATEGORIES" entry in the component restriction tables to
- "0+" from "0 or 1", to fall in line with [RFC5545].
-
- Changed the "RESOURCES" entry in the component restriction tables to
- "0+" from "0 or 1", to fall in line with [RFC5545].
-
- Changed the "CONTACT" entry in the "VFREEBUSY" restriction table to
- "0 or 1" from "0+", to fall in line with [RFC5545].
-
- Changed the "UID" entry in the "VFREEBUSY" and "PUBLISH" restriction
- tables to "1" from "0", to fall in line with [RFC5545].
-
- Added the "COMPLETED" entry in the "VTODO" restriction tables to fall
- in line with [RFC5545].
-
-
-
-
-
-Daboo Standards Track [Page 132]
-
-RFC 5546 iTIP December 2009
-
-
- Added the "REQUEST-STATUS" entry in the "VJOURNAL" restriction tables
- to fall in line with [RFC5545].
-
-A.2. Deprecated Features
-
- The "EXRULE" property was removed in [RFC5545] and references to that
- have been removed in this document too.
-
- The "PROCEDURE" value for the "ACTION" property was removed in
- [RFC5545] and references to that have been removed in this document
- too.
-
- The "THISANDPRIOR" option for the "RANGE" parameter was removed in
- [RFC5545] and references to that have been removed in this document
- too.
-
-Author's Address
-
- Cyrus Daboo (editor)
- Apple Inc.
- 1 Infinite Loop
- Cupertino, CA 95014
- USA
-
- EMail: cyrus@daboo.name
- URI: http://www.apple.com/
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Daboo Standards Track [Page 133]
-
diff --git a/specifications/calendar/rfc6047.txt b/specifications/calendar/rfc6047.txt
deleted file mode 100644
index c839c8ed..00000000
--- a/specifications/calendar/rfc6047.txt
+++ /dev/null
@@ -1,1235 +0,0 @@
-
-
-
-
-
-
-Internet Engineering Task Force (IETF) A. Melnikov, Ed.
-Request for Comments: 6047 Isode Ltd
-Obsoletes: 2447 December 2010
-Category: Standards Track
-ISSN: 2070-1721
-
-
- iCalendar Message-Based Interoperability Protocol (iMIP)
-
-Abstract
-
- This document, "iCalendar Message-Based Interoperability Protocol
- (iMIP)", specifies a binding from the iCalendar Transport-independent
- Interoperability Protocol (iTIP) to Internet email-based transports.
- Calendaring entries defined by the iCalendar Object Model (iCalendar)
- are wrapped using constructs from RFC 5322 and MIME (RFC 2045, RFC
- 2046, RFC 2047, and RFC 2049), and then transported over SMTP.
-
-Status of This Memo
-
- This is an Internet Standards Track document.
-
- This document is a product of the Internet Engineering Task Force
- (IETF). It represents the consensus of the IETF community. It has
- received public review and has been approved for publication by the
- Internet Engineering Steering Group (IESG). Further information on
- Internet Standards is available in Section 2 of RFC 5741.
-
- Information about the current status of this document, any errata,
- and how to provide feedback on it may be obtained at
- http://www.rfc-editor.org/info/rfc6047.
-
-Copyright Notice
-
- Copyright (c) 2010 IETF Trust and the persons identified as the
- document authors. All rights reserved.
-
- This document is subject to BCP 78 and the IETF Trust's Legal
- Provisions Relating to IETF Documents
- (http://trustee.ietf.org/license-info) in effect on the date of
- publication of this document. Please review these documents
- carefully, as they describe your rights and restrictions with respect
- to this document. Code Components extracted from this document must
- include Simplified BSD License text as described in Section 4.e of
- the Trust Legal Provisions and are provided without warranty as
- described in the Simplified BSD License.
-
-
-
-
-
-Melnikov Standards Track [Page 1]
-
-RFC 6047 iMIP December 2010
-
-
- This document may contain material from IETF Documents or IETF
- Contributions published or made publicly available before November
- 10, 2008. The person(s) controlling the copyright in some of this
- material may not have granted the IETF Trust the right to allow
- modifications of such material outside the IETF Standards Process.
- Without obtaining an adequate license from the person(s) controlling
- the copyright in such materials, this document may not be modified
- outside the IETF Standards Process, and derivative works of it may
- not be created outside the IETF Standards Process, except to format
- it for publication as an RFC or to translate it into languages other
- than English.
-
-Table of Contents
-
- 1. Introduction ....................................................3
- 1.1. Related Memos ..............................................3
- 1.2. Formatting Conventions .....................................3
- 1.3. Terminology ................................................4
- 2. MIME Message Format Binding .....................................4
- 2.1. MIME Media Type ............................................4
- 2.2. Security ...................................................5
- 2.2.1. Authorization .......................................5
- 2.2.2. Authentication ......................................5
- 2.2.3. Confidentiality .....................................5
- 2.3. Email Addresses ............................................6
- 2.4. Content-Type Header Field ..................................6
- 2.5. Content-Transfer-Encoding Header Field .....................7
- 2.6. Content-Disposition Header Field ...........................8
- 3. Security Considerations .........................................8
- 4. Examples .......................................................11
- 4.1. Single Component with an ATTACH Property ..................11
- 4.2. Using multipart/alternative for Low-Fidelity Clients ......11
- 4.3. Single Component with an ATTACH Property and
- Inline Attachment .........................................12
- 4.4. Multiple Similar Components ...............................14
- 4.5. Multiple Mixed Components .................................15
- 4.6. Detailed Components with an ATTACH Property ...............16
- 5. Recommended Practices ..........................................18
- 5.1. Use of Content and Message IDs ............................18
- 6. IANA Considerations ............................................18
- 7. References .....................................................19
- 7.1. Normative References ......................................19
- 7.2. Informative References ....................................20
- Appendix A. Changes since RFC 2447 ................................21
- Appendix B. Acknowledgements ......................................22
-
-
-
-
-
-
-Melnikov Standards Track [Page 2]
-
-RFC 6047 iMIP December 2010
-
-
-1. Introduction
-
- This document provides the transport-specific information ("binding")
- necessary to convey iCalendar Transport-independent Interoperability
- Protocol (iTIP) [iTIP] over Internet email (using MIME) as defined in
- [RFC5322] and [RFC2045]. Therefore, this document defines the
- iCalendar Message-Based Interoperability Protocol (iMIP).
-
-1.1. Related Memos
-
- Implementers will need to be familiar with several other memos that,
- along with this memo, form a framework for Internet calendaring and
- scheduling standards.
-
- This document specifies an Internet email binding for iTIP.
-
- [iCAL] specifies a core specification of objects, data types,
- properties, and property parameters.
-
- [iTIP] specifies an interoperability protocol for scheduling between
- different implementations.
-
- This memo does not attempt to repeat the specification of concepts or
- definitions from these other memos. Where possible, references are
- made to the memo that provides for the specification of these
- concepts or definitions.
-
-1.2. Formatting Conventions
-
- The mechanisms defined in this memo are defined in prose. In order
- to refer to elements of the calendaring and scheduling model, core
- object, or interoperability protocol defined in [iCAL] and [iTIP],
- some formatting conventions have been used.
-
- The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
- "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
- document are to be interpreted as described in RFC 2119 [RFC2119].
-
- Calendaring and scheduling roles are referred to in quoted strings of
- text with the first character of each word in uppercase. For
- example, "Organizer" refers to a role of a "Calendar User" within the
- scheduling protocol defined by [iTIP].
-
- Calendar components defined by [iCAL] are referred to with
- capitalized, quoted strings of text. All calendar components start
- with the letter "V". For example, "VEVENT" refers to the event
- calendar component, "VTODO" refers to the to-do calendar component,
- and "VJOURNAL" refers to the daily journal calendar component.
-
-
-
-Melnikov Standards Track [Page 3]
-
-RFC 6047 iMIP December 2010
-
-
- Scheduling methods defined by [iTIP] are referred to with
- capitalized, quoted strings of text. For example, "REQUEST" refers
- to the method for requesting a scheduling calendar component be
- created or modified; "REPLY" refers to the method a recipient of a
- request uses to update their status with the "Organizer" of the
- calendar component.
-
- Properties defined by [iCAL] are referred to with capitalized, quoted
- strings of text, followed by the word "property". For example,
- "ATTENDEE" property refers to the iCalendar property used to convey
- the calendar address of a "Calendar User".
-
- Property parameters defined by [iCAL] are referred to with lowercase,
- quoted strings of text, followed by the word "parameter". For
- example, "value" parameter refers to the iCalendar property parameter
- used to override the default data type for a property value.
-
-1.3. Terminology
-
- The email terms used in this memo are defined in [RFC5322] and
- [RFC2045]. The calendaring and scheduling terms used in this memo
- are defined in [iCAL] and [iTIP].
-
-2. MIME Message Format Binding
-
- This section defines the message binding to the MIME electronic mail
- transport.
-
- The sections below refer to the "originator" and the "recipient" of
- an iMIP message. In the case of a "request" method, the originator
- is the "Organizer" and the recipient is an "Attendee" of the event.
- In the case of a "response" method, the originator is an "Attendee"
- and the recipient is the "Organizer" of the event.
-
- The [RFC5322] "Reply-To" header field typically contains the email
- address of the originator of the scheduling message. However, this
- cannot be guaranteed because the sender of the iMIP message might not
- be the originator of the scheduling message and the sender's "Mail
- User Agent" (MUA) might not enforce iMIP semantics by translating the
- originator's address into the "Reply-To" email header field.
-
-2.1. MIME Media Type
-
- A MIME entity containing content information formatted according to
- this document will be referenced as a "text/calendar" content type
- [iCAL]. It is assumed that this content type will be transported
- through a MIME electronic mail transport.
-
-
-
-
-Melnikov Standards Track [Page 4]
-
-RFC 6047 iMIP December 2010
-
-
-2.2. Security
-
- This section addresses several aspects of security including
- authentication, authorization, and confidentiality. Authentication
- and confidentiality can be achieved using Secure/MIME (S/MIME)
- [RFC5750] [RFC5751], which uses the Security Multiparts framework for
- MIME [RFC1847].
-
-2.2.1. Authorization
-
- In iTIP messages [iTIP], only the "Organizer" is authorized to modify
- or cancel calendar entries she organizes. That is,
- spoof@xyz.example.net is not allowed to modify or cancel a meeting
- that was organized by a@example.com. Furthermore, only the
- respondent has the authorization to indicate their status to the
- "Organizer". That is, the "Organizer" MUST ignore an iTIP message
- from spoof@xyz.example.net that declines a meeting invitation for
- b@example.com.
-
- Implementations of iMIP SHOULD verify the authenticity of the creator
- of an iCalendar object before taking any action. Methods for doing
- this are presented later in this document.
-
- [RFC1847] message flow in iTIP supports someone working on behalf of
- a "Calendar User" through use of the "sent-by" parameter that is
- associated with the "ATTENDEE" and "ORGANIZER" properties. However,
- there is no mechanism to verify whether or not a "Calendar User" has
- authorized someone to work on their behalf. It is left to
- implementations to provide mechanisms for the "Calendar Users" to
- make that decision.
-
-2.2.2. Authentication
-
- Authentication MUST be performed using S/MIME [RFC5750] [RFC5751].
- Authentication is possible only on messages that have been signed.
- Unauthenticated messages (i.e., unsigned messages) may not be
- trusted.
-
-2.2.3. Confidentiality
-
- To ensure confidentiality using iMIP, implementations SHOULD utilize
- encryption specified in S/MIME [RFC5750] [RFC5751]. iMIP does not
- restrict a "Calendar User Agent" (CUA) from forwarding iCalendar
- objects to other users or agents.
-
-
-
-
-
-
-
-Melnikov Standards Track [Page 5]
-
-RFC 6047 iMIP December 2010
-
-
-2.3. Email Addresses
-
- The calendar address specified within the "ORGANIZER" and "ATTENDEE"
- properties in an iCalendar object sent using iMIP MUST be a proper
- "mailto:" [MAILTO] URI specification for the corresponding
- "Organizer" or "Attendee" of the "VEVENT" or "VTODO".
-
- Because [iTIP] does not preclude "Attendees" from forwarding
- "VEVENT"s or "VTODO"s to others, the [RFC5322] "Sender" value may not
- equal that of the "Organizer". Additionally, the "Organizer" or
- "Attendee" cannot be reliably inferred by the [RFC5322] "Sender" or
- "Reply-To" header field values of an iMIP message. The relevant
- address MUST be ascertained by opening the "text/calendar" MIME body
- part and examining the "ATTENDEE" and "ORGANIZER" properties.
-
-2.4. Content-Type Header Field
-
- A MIME body part containing content information that conforms to this
- document MUST have an [RFC2045] "Content-Type" value of
- "text/calendar". The [RFC2045] "Content-Type" header field MUST also
- include the MIME parameter "method". The value MUST be the same
- (ignoring case) as the value of the "METHOD" property within the
- iCalendar object.
-
- Note 1: A MIME message containing multiple iCalendar objects with
- different "method" values MUST be further encapsulated with a
- "multipart/mixed" MIME entity [RFC2046]. This will allow each of
- the iCalendar objects to be encapsulated within their own
- "text/calendar" MIME entity.
-
- Note 2: A MIME body part with a "Content-Type" value of
- "text/calendar" that lacks the "method" parameter is not
- considered to be an iMIP body part and thus is not subject to the
- requirements specified in this document.
-
- Note that according to [iCAL] the default character set for iCalendar
- objects is UTF-8 [UTF-8]. However, the default character set for a
- "text/*" MIME entity according to [RFC2046] is US-ASCII. Thus, a
- "charset" MIME parameter MUST be present if the iCalendar object
- contains characters that can't be represented in the US-ASCII
- character set and, as specified in [iCAL], it MUST have the value
- "UTF-8".
-
- The optional "component" MIME parameter defines the iCalendar
- component type contained within the iCalendar object.
-
-
-
-
-
-
-Melnikov Standards Track [Page 6]
-
-RFC 6047 iMIP December 2010
-
-
- The following is an example of this header field with a value that
- indicates an event message.
-
- Content-Type: text/calendar; method=REQUEST; charset=UTF-8;
- component=vevent
-
- The "text/calendar" content type allows for the scheduling message
- type to be included in a MIME message with other content information
- (i.e., "multipart/mixed") or included in a MIME message with a clear-
- text, human-readable form of the scheduling message (i.e.,
- "multipart/alternative" [RFC2046]).
-
- In order to permit the information in the scheduling message to be
- understood by MIME User Agents (UAs) that do not support the
- "text/calendar" content type, scheduling messages SHOULD be sent with
- an alternative, human-readable form of the information.
-
- Note that "multipart/alternative" MUST NOT be used to represent two
- slightly different iCalendar objects, for example, two "VEVENT"s with
- alternative starting times.
-
- CUAs can use other MIME parameters of the "Content-Type" header
- field, as well as a language specified in the Content-Language header
- field [RFC3282], to pick a "text/calendar" part for processing if a
- "multipart/alternative" MIME message contains more than one
- "text/calendar" part.
-
- Any receiving UA compliant with this specification MUST be able to
- process "text/calendar" body parts enclosed within "multipart/*".
- Note that a "multipart/mixed" MIME message can include multiple
- "text/calendar" components. The receiving UA MUST be able to process
- all of them.
-
-2.5. Content-Transfer-Encoding Header Field
-
- Unless an iMIP message is transported over 8-bit clean transport
- (such as SMTP [8BITMIME]), a transfer encoding such as quoted-
- printable or base64 [RFC2045] MUST be used for iCalendar objects
- containing any characters that can't be represented in the US-ASCII
- character set. For example:
-
-
-
-
-
-
-
-
-
-
-
-Melnikov Standards Track [Page 7]
-
-RFC 6047 iMIP December 2010
-
-
- From: user1@example.com
- To: user2@example.com
- Subject: Phone Conference
- Mime-Version: 1.0
- Date: Wed, 07 May 2008 21:30:25 +0400
- Message-ID: <4821E731.5040506@laptop1.example.com>
- Content-Type: text/calendar; method=REQUEST; charset=UTF-8
- Content-Transfer-Encoding: quoted-printable
-
- BEGIN:VCALENDAR
- PRODID:-//Example/ExampleCalendarClient//EN
- METHOD:REQUEST
- VERSION:2.0
- BEGIN:VEVENT
- ORGANIZER:mailto:user1@example.com
- ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:mailto:user1@example.com
- ATTENDEE;RSVP=YES;CUTYPE=INDIVIDUAL:mailto:user2@example.com
- DTSTAMP:20080507T170000Z
- DTSTART:20080701T160000Z
- DTEND:20080701T163000Z
- SUMMARY:Phone call to discuss your last visit
- DESCRIPTION:=D1=82=D1=8B =D0=BA=D0=B0=D0=BA - =D0=B4=D0=BE=D0=
- =B2=D0=BE=D0=BB=D0=B5=D0=BD =D0=BF=D0=BE=D0=B5=D0=B7=D0=B4=D0=BA=D0
- =BE=D0=B9?
- UID:calsvr.example.com-8739701987387998
- SEQUENCE:0
- STATUS:TENTATIVE
- END:VEVENT
- END:VCALENDAR
-
-2.6. Content-Disposition Header Field
-
- Implementations MAY include a "Content-Disposition" header field to
- define a file name for an iCalendar object. However, the handling of
- a MIME part MUST be based on its [RFC2045] "Content-Type" and not on
- the extension specified in the "Content-Disposition", as different
- email malware is known to trick User Agents into misinterpreting
- content of messages by specifying a file extension in the Content-
- Disposition header field that doesn't correspond to the value of the
- "Content-Type" header field.
-
-3. Security Considerations
-
- The security threats that applications must address when implementing
- iTIP are detailed in [iTIP]. In particular, two spoofing threats are
- identified in Section 6.1 of [iTIP]: spoofing the "Organizer", and
- spoofing an "Attendee". To address these threats, the originator of
- an iCalendar object must be authenticated by a recipient. Once
-
-
-
-Melnikov Standards Track [Page 8]
-
-RFC 6047 iMIP December 2010
-
-
- authenticated, a determination can be made as to whether or not the
- originator is authorized to perform the requested operation.
- Compliant applications MUST support signing and encrypting
- "text/calendar" body parts using a mechanism based on S/MIME
- [RFC5750] [RFC5751] in order to facilitate the authentication of the
- originator of the iCalendar object (see Sections 2.2.2 and 2.2.3).
- The steps for processing a signed iMIP message are described below:
-
- 1. Using S/MIME, determine who signed the "text/calendar" body part
- containing the iCalendar object. This is the "signer". (Note
- that the email address of the signer MUST be specified in the
- rfc822Name field of the "subject alternative name" extension of
- the signer certificate, as specified in [RFC5280],
- Section 4.1.2.6.) Note that the signer is not necessarily the
- person sending an e-mail message, since an e-mail message can be
- forwarded.
-
- 2. Correlate the signer to either an "ATTENDEE" property or to the
- "ORGANIZER" property in the iCalendar object, based on the method
- and the calendar component specified in the iCalendar object, as
- defined in Section 1.4 of [iTIP]. If the signer cannot be
- correlated to an "ATTENDEE"/"ORGANIZER" property, then actively
- warn the user controlling the "Calendar User Agent" that the
- iCalendar object is untrusted, and encourage the user to ignore
- the message, but give advanced users the option to (a) view the
- certificate of the signer and the entire certificate chain (if
- any) in order to help decide if the signer should be trusted to
- send the message, and then (b) allow the CUA to accept and process
- the iCalendar object.
-
- 3. Determine whether or not the "ATTENDEE"/"ORGANIZER" is authorized
- to perform the operation as defined by [iTIP]. If the conditions
- are not met, ignore the message.
-
- 4. If all the above conditions are met, the message can be processed.
-
- S/MIME signing also protects against malicious changes to messages in
- transit.
-
- If calendar confidentiality is required by the sender, signed iMIP
- messages SHOULD be encrypted by a mechanism based on S/MIME [RFC5750]
- [RFC5751]. If iMIP is used within a single ADministrative Management
- Domain (ADMD) [RFC5598], SMTP STARTTLS [SMTP-TLS] (together with
- STARTTLS in IMAP/POP [IMAP-POP-TLS]) MAY alternatively be used to
- provide calendar confidentiality.
-
-
-
-
-
-
-Melnikov Standards Track [Page 9]
-
-RFC 6047 iMIP December 2010
-
-
- Once a signed and/or encrypted iMIP message is received and
- successfully verified (as detailed above) by a CUA, the CUA SHOULD
- remember whether the sender of the message is using signing and/or
- encrypting. If an unsigned iMIP message is received from the same
- sender later on, the receiving CUA SHOULD warn the receiving user
- about a possible man-in-the-middle attack and SHOULD ignore the
- message, unless explicitly overridden by the user.
-
- Implementations MAY provide means for users to disable signing and
- encrypting.
-
- It is possible to receive iMIP messages sent by someone working on
- behalf of another "Calendar User". This is determined by examining
- the "sent-by" parameter in the relevant "ORGANIZER" or "ATTENDEE"
- property. [iCAL] and [iTIP] provide no mechanism to verify that a
- "Calendar User" has authorized someone else to work on their behalf.
- To address this security issue, implementations MUST provide
- mechanisms for the "Calendar Users" to make that decision before
- applying changes from someone working on behalf of a "Calendar User".
- One way to achieve this is to reject iMIP messages sent by users
- other than the "ORGANIZER" or the "ATTENDEE"s. Alternatively, the
- receiver could have a list of trusted proxies in
- its local security policy. And yet another way is to prompt the user
- for confirmation.
-
- iMIP-based calendaring is frequently deployed within a single ADMD,
- with boundary filtering employed to restrict email calendaring flows
- to be inside the ADMD. This can help in minimizing malicious changes
- to calendaring messages in transit, as well as in making
- authorization decisions less risky.
-
- A security consideration associated with the use of the Content-
- Disposition header field is described in Section 2.6.
-
- Use of S/MIME makes the security considerations discussed in
- [RFC5750] [RFC5751] relevant to this document. For additional
- security considerations regarding certificate and Certificate
- Revocation List (CRL) verification, please see [RFC5280].
-
-
-
-
-
-
-
-
-
-
-
-
-
-Melnikov Standards Track [Page 10]
-
-RFC 6047 iMIP December 2010
-
-
-4. Examples
-
-4.1. Single Component with an ATTACH Property
-
- This minimal message shows how an iCalendar object references an
- attachment. The attachment is accessible via its URL.
-
- From: sman@netscape.example.com
- To: stevesil@microsoft.example.com
- Subject: Phone Conference
- Mime-Version: 1.0
- Content-Type: text/calendar; method=REQUEST; charset=US-ASCII
- Content-Transfer-Encoding: 7bit
-
- BEGIN:VCALENDAR
- PRODID:-//Example/ExampleCalendarClient//EN
- METHOD:REQUEST
- VERSION:2.0
- BEGIN:VEVENT
- ORGANIZER:mailto:man@netscape.example.com
- ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:mailto:man@netscape.example.com
- ATTENDEE;RSVP=YES:mailto:stevesil@microsoft.example.com
- DTSTAMP:19970611T190000Z
- DTSTART:19970701T210000Z
- DTEND:19970701T230000Z
- SUMMARY:Phone Conference
- DESCRIPTION:Please review the attached document.
- UID:calsvr.example.com-873970198738777
- ATTACH:ftp://ftp.bar.example.com/pub/docs/foo.doc
- STATUS:CONFIRMED
- END:VEVENT
- END:VCALENDAR
-
-4.2. Using multipart/alternative for Low-Fidelity Clients
-
- This example shows how a client can emit a multipart message that
- includes both a plain text version and the full iCalendar object.
- Clients that do not support "text/calendar" will still be capable of
- rendering the plain text representation.
-
-
-
-
-
-
-
-
-
-
-
-
-Melnikov Standards Track [Page 11]
-
-RFC 6047 iMIP December 2010
-
-
- From: foo1@example.com
- To: foo2@example.com
- Subject: Phone Conference
- Mime-Version: 1.0
- Content-Type: multipart/alternative; boundary="01BD3665.3AF0D360"
-
- --01BD3665.3AF0D360
- Content-Type: text/plain; charset=us-ascii
- Content-Transfer-Encoding: 7bit
-
- This is an alternative representation of a "text/calendar"
- MIME object.
-
- When: 7/1/1997 10:00AM PDT - 7/1/97 10:30AM PDT
- Where:
- Organizer: foo1@example.com
- Summary: Phone Conference
-
- --01BD3665.3AF0D360
- Content-Type: text/calendar; method=REQUEST; charset=US-ASCII
- Content-Transfer-Encoding: 7bit
-
- BEGIN:VCALENDAR
- PRODID:-//Example/ExampleCalendarClient//EN
- METHOD:REQUEST
- VERSION:2.0
- BEGIN:VEVENT
- ORGANIZER:mailto:foo1@example.com
- ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:mailto:foo1@example.com
- ATTENDEE;RSVP=YES;CUTYPE=INDIVIDUAL:mailto:foo2@example.com
- DTSTAMP:19970611T190000Z
- DTSTART:19970701T170000Z
- DTEND:19970701T173000Z
- SUMMARY:Phone Conference
- UID:calsvr.example.com-8739701987387771
- SEQUENCE:0
- STATUS:CONFIRMED
- END:VEVENT
- END:VCALENDAR
-
- --01BD3665.3AF0D360
-
-4.3. Single Component with an ATTACH Property and Inline Attachment
-
- This example shows how a message containing an iCalendar object
- references an attached document. The reference is made using a
- Content-ID (CID). Thus, the iCalendar object and the document are
- packaged in a "multipart/related" encapsulation.
-
-
-
-Melnikov Standards Track [Page 12]
-
-RFC 6047 iMIP December 2010
-
-
- From: foo1@example.com
- To: foo2@example.com
- Subject: Phone Conference
- Mime-Version: 1.0
- Content-Type: multipart/related; boundary="boundary-example-1"
-
- --boundary-example-1
-
- Content-Type: text/calendar; method=REQUEST; charset=US-ASCII
- Content-Transfer-Encoding: 7bit
- Content-Disposition: attachment; filename="event.ics"
-
- BEGIN:VCALENDAR
- PRODID:-//Example/ExampleCalendarClient//EN
- METHOD:REQUEST
- VERSION:2.0
- BEGIN:VEVENT
- ORGANIZER:mailto:foo1@example.com
- ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:mailto:foo1@example.com
- ATTENDEE;RSVP=YES;CUTYPE=INDIVIDUAL:mailto:foo2@example.com
- DTSTAMP:19970611T190000Z
- DTSTART:19970701T180000Z
- DTEND:19970701T183000Z
- SUMMARY:Phone Conference
- UID:calsvr.example.com-8739701987387771
- ATTACH:cid:123456789@example.com
- SEQUENCE:0
- STATUS:CONFIRMED
- END:VEVENT
- END:VCALENDAR
-
- --boundary-example-1
- Content-Type: application/msword; name="FieldReport.doc"
- Content-Transfer-Encoding: base64
- Content-Disposition: inline; filename="FieldReport.doc"
- Content-ID: <123456789@example.com>
-
- 0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAPgADAP7/CQAGAAAAAAAAAAABAAAARAAAAAAA
- AAAAEAAAQAAAAAEAAAD+////AAAAAEUAAAD/////////////////////////////////
- ...
-
- --boundary-example-1--
-
-
-
-
-
-
-
-
-
-Melnikov Standards Track [Page 13]
-
-RFC 6047 iMIP December 2010
-
-
-4.4. Multiple Similar Components
-
- Multiple iCalendar components of the same type can be included in the
- iCalendar object when the "METHOD" is the same for each component.
-
- From: foo1@example.com
- To: foo2@example.com
- Subject: Summer Company Holidays
- Mime-Version: 1.0
- Content-Type: text/calendar; method=PUBLISH; charset=US-ASCII
- Content-Transfer-Encoding: 7bit
- Content-Disposition: attachment; filename="event.ics"
-
- BEGIN:VCALENDAR
- PRODID:-//Example/ExampleCalendarClient//EN
- METHOD:PUBLISH
- VERSION:2.0
- BEGIN:VEVENT
- ORGANIZER:mailto:foo1@example.com
- DTSTAMP:19970611T150000Z
- DTSTART:19970701T150000Z
- DTEND:19970701T230000Z
- SUMMARY:Company Picnic
- DESCRIPTION:Food and drink will be provided
- UID:calsvr.example.com-873970198738777-1
- SEQUENCE:0
- STATUS:CONFIRMED
- END:VEVENT
- BEGIN:VEVENT
- ORGANIZER:mailto:foo1@example.com
- DTSTAMP:19970611T190000Z
- DTSTART:19970715T150000Z
- DTEND:19970715T230000Z
- SUMMARY:Company Bowling Tournament
- DESCRIPTION:We have 10 lanes reserved
- UID:calsvr.example.com-873970198738777-2
- SEQUENCE:0
- STATUS:CONFIRMED
- END:VEVENT
- END:VCALENDAR
-
-
-
-
-
-
-
-
-
-
-
-Melnikov Standards Track [Page 14]
-
-RFC 6047 iMIP December 2010
-
-
-4.5. Multiple Mixed Components
-
- Different component types must be encapsulated in separate iCalendar
- objects.
-
- From: foo1@example.com
- To: foo2@example.com
- Subject: Phone Conference
- Mime-Version: 1.0
- Content-Type: multipart/mixed;
- boundary="--FEE3790DC7E35189CA67CE2C"
-
- This is a multi-part message in MIME format.
-
- ----FEE3790DC7E35189CA67CE2C
- Content-Type: text/calendar; method=REQUEST; charset=US-ASCII
- Content-Transfer-Encoding: 7bit
- Content-Disposition: attachment; filename="event1.ics"
-
- BEGIN:VCALENDAR
- PRODID:-//Example/ExampleCalendarClient//EN
- METHOD:REQUEST
- VERSION:2.0
- BEGIN:VEVENT
- ORGANIZER:mailto:foo1@example.com
- ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:mailto:foo1@example.com
- ATTENDEE;RSVP=YES;CUTYPE=INDIVIDUAL:mailto:foo2@example.com
- DTSTAMP:19970611T190000Z
- DTSTART:19970701T210000Z
- DTEND:19970701T230000Z
- SUMMARY:Phone Conference
- DESCRIPTION:Discuss what happened at the last meeting
- UID:calsvr.example.com-8739701987387772
- SEQUENCE:0
- STATUS:CONFIRMED
- END:VEVENT
- END:VCALENDAR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Melnikov Standards Track [Page 15]
-
-RFC 6047 iMIP December 2010
-
-
- ----FEE3790DC7E35189CA67CE2C
- Content-Type: text/calendar; method=REQUEST; charset=US-ASCII
- Content-Transfer-Encoding: 7bit
- Content-Disposition: attachment; filename="todo1.ics"
-
- BEGIN:VCALENDAR
- PRODID:-//Example/ExampleCalendarClient//EN
- METHOD:REQUEST
- VERSION:2.0
- BEGIN:VTODO
- DUE:19970701T160000Z
- ORGANIZER:mailto:foo1@example.com
- ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:mailto:foo1@example.com
- ATTENDEE;RSVP=YES:mailto:foo2@example.com
- SUMMARY:Phone Conference
- DESCRIPTION:Discuss a new location for the company picnic
- UID:calsvr.example.com-td-8739701987387773
- SEQUENCE:0
- STATUS:NEEDS-ACTION
- END:VEVENT
- END:VCALENDAR
-
- ----FEE3790DC7E35189CA67CE2C
-
-4.6. Detailed Components with an ATTACH Property
-
- This example shows the format of a message containing a group meeting
- between three individuals. The "multipart/related" encapsulation is
- used because the iCalendar object contains an ATTACH property that
- uses a CID to reference the attachment.
-
- From: foo1@example.com
- MIME-Version: 1.0
- To: foo2@example.com,foo3@example.com
- Subject: REQUEST - Phone Conference
- Content-Type: multipart/related;
- boundary="--FEE3790DC7E35189CA67CE2C"
-
- ----FEE3790DC7E35189CA67CE2C
- Content-Type: multipart/alternative;
- boundary="--00FEE3790DC7E35189CA67CE2C00"
-
-
-
-
-
-
-
-
-
-
-Melnikov Standards Track [Page 16]
-
-RFC 6047 iMIP December 2010
-
-
- ----00FEE3790DC7E35189CA67CE2C00
- Content-Type: text/plain; charset=us-ascii
- Content-Transfer-Encoding: 7bit
-
- When: 7/1/1997 10:00PM PDT - 7/1/97 10:30 PM PDT
- Where:
- Organizer: foo1@example.com
- Summary: Let's discuss the attached document
-
- ----00FEE3790DC7E35189CA67CE2C00
-
- Content-Type: text/calendar; method=REQUEST; charset=US-ASCII;
- Component=vevent
- Content-Transfer-Encoding: 7bit
- Content-Disposition: attachment; filename="event.ics"
-
- BEGIN:VCALENDAR
- PRODID:-//Example/ExampleCalendarClient//EN
- METHOD:REQUEST
- VERSION:2.0
- BEGIN:VEVENT
- ORGANIZER:foo1@example.com
- ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:foo1@example.com
- ATTENDEE;RSVP=YES;CUTYPE=INDIVIDUAL:mailto:foo2@example.com
- ATTENDEE;RSVP=YES;CUTYPE=INDIVIDUAL:mailto:foo3@example.com
- DTSTAMP:19970611T190000Z
- DTSTART:19970621T170000Z
- DTEND:199706211T173000Z
- SUMMARY:Let's discuss the attached document
- UID:calsvr.example.com-873970198738777-8aa
- ATTACH:cid:calsvr.example.com-12345aaa
- SEQUENCE:0
- STATUS:CONFIRMED
- END:VEVENT
- END:VCALENDAR
-
- ----00FEE3790DC7E35189CA67CE2C00
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Melnikov Standards Track [Page 17]
-
-RFC 6047 iMIP December 2010
-
-
- ----FEE3790DC7E35189CA67CE2C
- Content-Type: application/msword; name="FieldReport.doc"
- Content-Transfer-Encoding: base64
- Content-Disposition: inline; filename="FieldReport.doc"
- Content-ID:
-
- R0lGODdhTAQZAJEAAFVVVd3d3e4AAP///ywAAAAATAQZAAAC/5yPOSLhD6OctNqLs94Xq
- AG4kiW5omm6sq27gvH8kzX9o1y+s73/g8MCofEovGITCoxKMbyCR16cNSq9YrNarfcrvd
- riIH5LL5jE6rxc3G+v2cguf0uv2Oz+v38L7/DxgoOKjURnjIIbe3yNjo+AgZWYVIWWl5i
- ZnJY6J
- ...
-
- ----FEE3790DC7E35189CA67CE2C
-
-5. Recommended Practices
-
- This section outlines a series of recommended practices when using a
- messaging transport to exchange iCalendar objects.
-
-5.1. Use of Content and Message IDs
-
- The [iCAL] specification makes frequent use of the URI for data types
- in properties such as "DESCRIPTION", "ATTACH", "CONTACT", and others.
- Two forms of URIs are the Message ID (MID) and the Content-ID (CID).
- These are defined in [RFC2392]. Although [RFC2392] allows
- referencing messages or MIME body parts in other MIME entities or
- stores, it is strongly RECOMMENDED that iMIP implementations include
- all referenced messages and body parts in a single MIME entity.
- Simply put, if an iCalendar object contains CID or MID references to
- other messages or body parts, implementations should ensure that
- these messages and/or body parts are transmitted with the iCalendar
- object. If they are not, there is no guarantee that the receiving
- CUA will have the access or the authorization to view those objects.
-
-6. IANA Considerations
-
- The "text/calendar" MIME media type was registered in [iCAL].
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Melnikov Standards Track [Page 18]
-
-RFC 6047 iMIP December 2010
-
-
-7. References
-
-7.1. Normative References
-
- [iCAL] Desruisseaux, B., Ed., "Internet Calendaring and
- Scheduling Core Object Specification (iCalendar)",
- RFC 5545, September 2009.
-
- [iTIP] Daboo, C., Ed., "iCalendar Transport-Independent
- Interoperability Protocol (iTIP)", RFC 5546, December
- 2009.
-
- [RFC5322] Resnick, P., Ed., "Internet Message Format", RFC 5322,
- October 2008.
-
- [MAILTO] Duerst, M., Masinter, L., and J. Zawinski, "The 'mailto'
- URI Scheme", RFC 6068, October 2010.
-
- [RFC1847] Galvin, J., Murphy, S., Crocker, S., and N. Freed,
- "Security Multiparts for MIME: Multipart/Signed and
- Multipart/Encrypted", RFC 1847, October 1995.
-
- [RFC2045] Freed, N. and N. Borenstein, "Multipurpose Internet Mail
- Extensions (MIME) Part One: Format of Internet Message
- Bodies", RFC 2045, November 1996.
-
- [RFC2046] Freed, N. and N. Borenstein, "Multipurpose Internet Mail
- Extensions (MIME) Part Two: Media Types", RFC 2046,
- November 1996.
-
- [RFC2392] Levinson, E., "Content-ID and Message-ID Uniform Resource
- Locators", RFC 2392, August 1998.
-
- [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
- Requirement Levels", BCP 14, RFC 2119, March 1997.
-
- [UTF-8] Yergeau, F., "UTF-8, a transformation format of ISO
- 10646", STD 63, RFC 3629, November 2003.
-
- [SMTP-TLS] Hoffman, P., "SMTP Service Extension for Secure SMTP over
- Transport Layer Security", RFC 3207, February 2002.
-
- [IMAP-POP-TLS]
- Newman, C., "Using TLS with IMAP, POP3 and ACAP",
- RFC 2595, June 1999.
-
-
-
-
-
-
-Melnikov Standards Track [Page 19]
-
-RFC 6047 iMIP December 2010
-
-
- [RFC5750] Ramsdell, B. and S. Turner, "Secure/Multipurpose Internet
- Mail Extensions (S/MIME) Version 3.2 Certificate
- Handling", RFC 5750, January 2010.
-
- [RFC5751] Ramsdell, B. and S. Turner, "Secure/Multipurpose Internet
- Mail Extensions (S/MIME) Version 3.2 Message
- Specification", RFC 5751, January 2010.
-
- [RFC5280] Cooper, D., Santesson, S., Farrell, S., Boeyen, S.,
- Housley, R., and W. Polk, "Internet X.509 Public Key
- Infrastructure Certificate and Certificate Revocation
- List (CRL) Profile", RFC 5280, May 2008.
-
-7.2. Informative References
-
- [8BITMIME] Klensin, J., Freed, N., Rose, M., Stefferud, E., and D.
- Crocker, "SMTP Service Extension for 8bit-MIMEtransport",
- RFC 1652, July 1994.
-
- [RFC5598] Crocker, D., "Internet Mail Architecture", RFC 5598, July
- 2009.
-
- [RFC3282] Alvestrand, H., "Content Language Headers", RFC 3282, May
- 2002.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Melnikov Standards Track [Page 20]
-
-RFC 6047 iMIP December 2010
-
-
-Appendix A. Changes since RFC 2447
-
- Updated references. Split them into Normative and Informative.
-
- Updated examples to use example.com/example.net domains.
-
- Corrected usage of RFC 2119 language.
-
- Clarified that charset=UTF-8 is required, unless the calendar can be
- entirely represented in US-ASCII.
-
- Clarified that 7-bit content transfer encodings should be used unless
- the calendar object is known to be transferred over 8-bit clean
- transport.
-
- Clarified that file extension specified in the Content-Disposition
- header field is not to be used to override the "Content-Type" MIME
- type.
-
- Disallowed use of "multipart/alternative" for slightly different
- representations of the same calendar.
-
- Clarified handling of the "method" MIME parameter of the "Content-
- Type" header field.
-
- Clarified that in an iMIP message an ORGANIZER/ATTENDEE property
- contains a mailto: URI.
-
- Fixed examples with ATTENDEE property to use "CUTYPE=" instead of
- "TYPE=".
-
- Clarified that message integrity/confidentiality should be achieved
- using S/MIME.
-
- Provided additional examples.
-
- Improved the Security Considerations section.
-
- Made multiple editorial changes to different sections of the
- document.
-
-
-
-
-
-
-
-
-
-
-
-Melnikov Standards Track [Page 21]
-
-RFC 6047 iMIP December 2010
-
-
-Appendix B. Acknowledgements
-
- The editor of this document wishes to thank Frank Dawson, Steve
- Mansour, and Steve Silverberg, the original authors of RFC 2447, as
- well as the following individuals who have participated in the
- drafting, review, and discussion of this memo:
-
- Reinhold Kainhofer, Cyrus Daboo, Bernard Desruisseaux, Eliot Lear,
- and Peter Saint-Andre.
-
-Author's Address
-
- Alexey Melnikov (editor)
- Isode Ltd
- 5 Castle Business Village
- 36 Station Road
- Hampton, Middlesex TW12 2BX
- UK
-
- EMail: Alexey.Melnikov@isode.com
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Melnikov Standards Track [Page 22]
-
diff --git a/specifications/calendar/rfc8984.pdf b/specifications/calendar/rfc8984.pdf
deleted file mode 100644
index 71318d7d..00000000
Binary files a/specifications/calendar/rfc8984.pdf and /dev/null differ
diff --git a/specifications/calendar/rfc8984.txt b/specifications/calendar/rfc8984.txt
deleted file mode 100644
index 565277cc..00000000
--- a/specifications/calendar/rfc8984.txt
+++ /dev/null
@@ -1,3987 +0,0 @@
-
-
-
-
-Internet Engineering Task Force (IETF) N. Jenkins
-Request for Comments: 8984 R. Stepanek
-Category: Standards Track Fastmail
-ISSN: 2070-1721 July 2021
-
-
- JSCalendar: A JSON Representation of Calendar Data
-
-Abstract
-
- This specification defines a data model and JSON representation of
- calendar data that can be used for storage and data exchange in a
- calendaring and scheduling environment. It aims to be an alternative
- and, over time, successor to the widely deployed iCalendar data
- format. It also aims to be unambiguous, extendable, and simple to
- process. In contrast to the jCal format, which is also based on
- JSON, JSCalendar is not a direct mapping from iCalendar but defines
- the data model independently and expands semantics where appropriate.
-
-Status of This Memo
-
- This is an Internet Standards Track document.
-
- This document is a product of the Internet Engineering Task Force
- (IETF). It represents the consensus of the IETF community. It has
- received public review and has been approved for publication by the
- Internet Engineering Steering Group (IESG). Further information on
- Internet Standards is available in Section 2 of RFC 7841.
-
- Information about the current status of this document, any errata,
- and how to provide feedback on it may be obtained at
- https://www.rfc-editor.org/info/rfc8984.
-
-Copyright Notice
-
- Copyright (c) 2021 IETF Trust and the persons identified as the
- document authors. All rights reserved.
-
- This document is subject to BCP 78 and the IETF Trust's Legal
- Provisions Relating to IETF Documents
- (https://trustee.ietf.org/license-info) in effect on the date of
- publication of this document. Please review these documents
- carefully, as they describe your rights and restrictions with respect
- to this document. Code Components extracted from this document must
- include Simplified BSD License text as described in Section 4.e of
- the Trust Legal Provisions and are provided without warranty as
- described in the Simplified BSD License.
-
-Table of Contents
-
- 1. Introduction
- 1.1. Motivation and Relation to iCalendar and jCal
- 1.2. Notational Conventions
- 1.3. Type Signatures
- 1.4. Data Types
- 1.4.1. Id
- 1.4.2. Int
- 1.4.3. UnsignedInt
- 1.4.4. UTCDateTime
- 1.4.5. LocalDateTime
- 1.4.6. Duration
- 1.4.7. SignedDuration
- 1.4.8. TimeZoneId
- 1.4.9. PatchObject
- 1.4.10. Relation
- 1.4.11. Link
- 2. JSCalendar Objects
- 2.1. Event
- 2.2. Task
- 2.3. Group
- 3. Structure of JSCalendar Objects
- 3.1. Object Type
- 3.2. Normalization and Equivalence
- 3.3. Vendor-Specific Property Extensions, Values, and Types
- 4. Common JSCalendar Properties
- 4.1. Metadata Properties
- 4.1.1. @type
- 4.1.2. uid
- 4.1.3. relatedTo
- 4.1.4. prodId
- 4.1.5. created
- 4.1.6. updated
- 4.1.7. sequence
- 4.1.8. method
- 4.2. What and Where Properties
- 4.2.1. title
- 4.2.2. description
- 4.2.3. descriptionContentType
- 4.2.4. showWithoutTime
- 4.2.5. locations
- 4.2.6. virtualLocations
- 4.2.7. links
- 4.2.8. locale
- 4.2.9. keywords
- 4.2.10. categories
- 4.2.11. color
- 4.3. Recurrence Properties
- 4.3.1. recurrenceId
- 4.3.2. recurrenceIdTimeZone
- 4.3.3. recurrenceRules
- 4.3.4. excludedRecurrenceRules
- 4.3.5. recurrenceOverrides
- 4.3.6. excluded
- 4.4. Sharing and Scheduling Properties
- 4.4.1. priority
- 4.4.2. freeBusyStatus
- 4.4.3. privacy
- 4.4.4. replyTo
- 4.4.5. sentBy
- 4.4.6. participants
- 4.4.7. requestStatus
- 4.5. Alerts Properties
- 4.5.1. useDefaultAlerts
- 4.5.2. alerts
- 4.6. Multilingual Properties
- 4.6.1. localizations
- 4.7. Time Zone Properties
- 4.7.1. timeZone
- 4.7.2. timeZones
- 5. Type-Specific JSCalendar Properties
- 5.1. Event Properties
- 5.1.1. start
- 5.1.2. duration
- 5.1.3. status
- 5.2. Task Properties
- 5.2.1. due
- 5.2.2. start
- 5.2.3. estimatedDuration
- 5.2.4. percentComplete
- 5.2.5. progress
- 5.2.6. progressUpdated
- 5.3. Group Properties
- 5.3.1. entries
- 5.3.2. source
- 6. Examples
- 6.1. Simple Event
- 6.2. Simple Task
- 6.3. Simple Group
- 6.4. All-Day Event
- 6.5. Task with a Due Date
- 6.6. Event with End Time Zone
- 6.7. Floating-Time Event (with Recurrence)
- 6.8. Event with Multiple Locations and Localization
- 6.9. Recurring Event with Overrides
- 6.10. Recurring Event with Participants
- 7. Security Considerations
- 7.1. Expanding Recurrences
- 7.2. JSON Parsing
- 7.3. URI Values
- 7.4. Spam
- 7.5. Duplication
- 7.6. Time Zones
- 8. IANA Considerations
- 8.1. Media Type Registration
- 8.2. Creation of the "JSCalendar Properties" Registry
- 8.2.1. Preliminary Community Review
- 8.2.2. Submit Request to IANA
- 8.2.3. Designated Expert Review
- 8.2.4. Change Procedures
- 8.2.5. "JSCalendar Properties" Registry Template
- 8.2.6. Initial Contents for the "JSCalendar Properties"
- Registry
- 8.3. Creation of the "JSCalendar Types" Registry
- 8.3.1. "JSCalendar Types" Registry Template
- 8.3.2. Initial Contents for the "JSCalendar Types" Registry
- 8.4. Creation of the "JSCalendar Enum Values" Registry
- 8.4.1. "JSCalendar Enum Values" Registry Property Template
- 8.4.2. "JSCalendar Enum Values" Registry Value Template
- 8.4.3. Initial Contents for the "JSCalendar Enum Values"
- Registry
- 9. References
- 9.1. Normative References
- 9.2. Informative References
- Acknowledgments
- Authors' Addresses
-
-1. Introduction
-
- This document defines a data model for calendar event and task
- objects, or groups of such objects, in electronic calendar
- applications and systems. The format aims to be unambiguous,
- extendable, and simple to process.
-
- The key design considerations for this data model are as follows:
-
- * The attributes of the calendar entry represented must be described
- as simple key-value pairs. Simple events are simple to represent;
- complex events can be modeled accurately.
-
- * Wherever possible, there should be only one way to express the
- desired semantics, reducing complexity.
-
- * The data model should avoid ambiguities, which often lead to
- interoperability issues between implementations.
-
- * The data model should be generally compatible with the iCalendar
- data format [RFC5545] [RFC7986] and extensions, but the
- specification should add new attributes where the iCalendar format
- currently lacks expressivity, and drop seldom-used, obsolete, or
- redundant properties. This means translation with no loss of
- semantics should be easy with most common iCalendar files.
-
- * Extensions, such as new properties and components, should not
- require updates to this document.
-
- The representation of this data model is defined in the Internet JSON
- (I-JSON) format [RFC7493], which is a strict subset of the JSON data
- interchange format [RFC8259]. Using JSON is mostly a pragmatic
- choice: its widespread use makes JSCalendar easier to adopt and the
- ready availability of production-ready JSON implementations
- eliminates a whole category of parser-related interoperability
- issues, which iCalendar has often suffered from.
-
-1.1. Motivation and Relation to iCalendar and jCal
-
- The iCalendar data format [RFC5545], a widely deployed interchange
- format for calendaring and scheduling data, has served calendaring
- vendors for a long time but contains some ambiguities and pitfalls
- that cannot be overcome without backward-incompatible changes.
-
- Sources of implementation errors include the following:
-
- * iCalendar defines various formats for local times, UTC, and dates.
-
- * iCalendar requires custom time zone definitions within a single
- calendar component.
-
- * iCalendar's definition of recurrence rules is ambiguous and has
- resulted in differing interpretations, even between experienced
- calendar developers.
-
- * The iCalendar format itself causes interoperability issues due to
- misuse of CRLF-terminated strings, line continuations, and subtle
- differences among iCalendar parsers.
-
- In recent years, many new products and services have appeared that
- wish to use a JSON representation of calendar data within their APIs.
- The JSON format for iCalendar data, jCal [RFC7265], is a direct
- mapping between iCalendar and JSON. In its effort to represent full
- iCalendar semantics, it inherits all the same pitfalls and uses a
- complicated JSON structure.
-
- As a consequence, since the standardization of jCal, the majority of
- implementations and service providers either kept using iCalendar or
- came up with their own proprietary JSON representations, which are
- incompatible with each other and often suffer from common pitfalls,
- such as storing event start times in UTC (which become incorrect if
- the time zone's rules change in the future). JSCalendar meets the
- demand for JSON-formatted calendar data that is free of such known
- problems and provides a standard representation as an alternative to
- the proprietary formats.
-
-1.2. Notational Conventions
-
- The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
- "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
- "OPTIONAL" in this document are to be interpreted as described in
- BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all
- capitals, as shown here.
-
- The underlying format used for this specification is JSON.
- Consequently, the terms "object" and "array" as well as the four
- primitive types (strings, numbers, booleans, and null) are to be
- interpreted as described in Section 1 of [RFC8259].
-
- Some examples in this document contain "partial" JSON documents used
- for illustrative purposes. In these examples, an ellipsis "..." is
- used to indicate a portion of the document that has been removed for
- compactness.
-
-1.3. Type Signatures
-
- Type signatures are given for all JSON values in this document. The
- following conventions are used:
-
- "*": The type is undefined (the value could be any type, although
- permitted values may be constrained by the context of this value).
-
- "String": This is the JSON string type.
-
- "Number": This is the JSON number type.
-
- "Boolean": This is the JSON boolean type.
-
- "A[B]": The keys are all of type "A" and the values are all of type
- "B" for a JSON object.
-
- "A[]": There is an array of values of type "A"
-
- "A|B": The value is either of type "A" or of type "B".
-
- Other types may also be given; their representations are defined
- elsewhere in this document.
-
-1.4. Data Types
-
- In addition to the standard JSON data types, the following data types
- are used in this specification:
-
-1.4.1. Id
-
- Where "Id" is given as a data type, it means a "String" of at least 1
- and a maximum of 255 octets in size, and it MUST only contain
- characters from the "URL and Filename Safe" base64url alphabet, as
- defined in Section 5 of [RFC4648], excluding the pad character ("=").
- This means the allowed characters are the ASCII alphanumeric
- characters ("A-Za-z0-9"), hyphen ("-"), and underscore ("_").
-
- In many places in JSCalendar, a JSON map is used where the map keys
- are of type Id and the map values are all the same type of object.
- This construction represents an unordered set of objects, with the
- added advantage that each entry has a name (the corresponding map
- key). This allows for more concise patching of objects, and, when
- applicable, for the objects in question to be referenced from other
- objects within the JSCalendar object.
-
- Unless otherwise specified for a particular property, there are no
- uniqueness constraints on an Id value (other than, of course, the
- requirement that you cannot have two values with the same key within
- a single JSON map). For example, two Event objects might use the
- same Ids in their respective "links" properties or, within the same
- Event object, the same Id could appear in the "participants" and
- "alerts" properties. These situations do not imply any semantic
- connections among the objects.
-
-1.4.2. Int
-
- Where "Int" is given as a data type, it means an integer in the range
- -2^53+1 <= value <= 2^53-1, the safe range for integers stored in a
- floating-point double, represented as a JSON "Number".
-
-1.4.3. UnsignedInt
-
- Where "UnsignedInt" is given as a data type, it means an integer in
- the range 0 <= value <= 2^53-1, represented as a JSON "Number".
-
-1.4.4. UTCDateTime
-
- This is a string in the "date-time" [RFC3339] format, with the
- further restrictions that any letters MUST be in uppercase, and the
- time offset MUST be the character "Z". Fractional second values MUST
- NOT be included unless non-zero and MUST NOT have trailing zeros, to
- ensure there is only a single representation for each date-time.
-
- For example, "2010-10-10T10:10:10.003Z" is conformant, but
- "2010-10-10T10:10:10.000Z" is invalid and is correctly encoded as
- "2010-10-10T10:10:10Z".
-
-1.4.5. LocalDateTime
-
- This is a date-time string with no time zone/offset information. It
- is otherwise in the same format as UTCDateTime, including fractional
- seconds. For example, "2006-01-02T15:04:05" and
- "2006-01-02T15:04:05.003" are both valid. The time zone to associate
- with the LocalDateTime comes from the "timeZone" property of the
- JSCalendar object (see Section 4.7.1). If no time zone is specified,
- the LocalDateTime is "floating". Floating date-times are not tied to
- any specific time zone. Instead, they occur in each time zone at the
- given wall-clock time (as opposed to the same instant point in time).
-
- A time zone may have a period of discontinuity, for example, a change
- from standard time to daylight savings time. When converting local
- date-times that fall in the discontinuity to UTC, the offset before
- the transition MUST be used.
-
- For example, in the America/Los_Angeles time zone, the date-time
- 2020-11-01T01:30:00 occurs twice: before the daylight savings time
- (DST) transition with a UTC offset of -07:00 and again after the
- transition with an offset of -08:00. When converting to UTC, we
- therefore use the offset before the transition (-07:00), so it
- becomes 2020-11-01T08:30:00Z.
-
- Similarly, in the Australia/Melbourne time zone, the date-time
- 2020-10-04T02:30:00 does not exist; the clocks are moved forward one
- hour for DST on that day at 02:00. However, such a value may appear
- during calculations (see duration semantics in Section 1.4.6) or due
- to a change in time zone rules (so it was valid when the event was
- first created). Again, it is interpreted as though the offset before
- the transition is in effect (+10:00); therefore, when converted to
- UTC, we get 2020-10-03T16:30:00Z.
-
-1.4.6. Duration
-
- Where Duration is given as a type, it means a length of time
- represented by a subset of the ISO 8601 duration format, as specified
- by the following ABNF [RFC5234]:
-
- dur-secfrac = "." 1*DIGIT
- dur-second = 1*DIGIT [dur-secfrac] "S"
- dur-minute = 1*DIGIT "M" [dur-second]
- dur-hour = 1*DIGIT "H" [dur-minute]
- dur-time = "T" (dur-hour / dur-minute / dur-second)
- dur-day = 1*DIGIT "D"
- dur-week = 1*DIGIT "W"
- dur-cal = (dur-week [dur-day] / dur-day)
-
- duration = "P" (dur-cal [dur-time] / dur-time)
-
- In addition, the duration MUST NOT include fractional second values
- unless the fraction is non-zero. Fractional second values MUST NOT
- have trailing zeros to ensure there is only a single representation
- for each duration.
-
- A duration specifies an abstract number of weeks, days, hours,
- minutes, and/or seconds. A duration specified using weeks or days
- does not always correspond to an exact multiple of 24 hours. The
- number of hours/minutes/seconds may vary if it overlaps a period of
- discontinuity in the event's time zone, for example, a change from
- standard time to daylight savings time. Leap seconds MUST NOT be
- considered when adding or subtracting a duration to/from a
- LocalDateTime.
-
- To add a duration to a LocalDateTime:
-
- 1. Add any week or day components of the duration to the date. A
- week is always the same as seven days.
-
- 2. If a time zone applies to the LocalDateTime, convert it to a
- UTCDateTime following the semantics in Section 1.4.5.
-
- 3. Add any hour, minute, or second components of the duration (in
- absolute time).
-
- 4. Convert the resulting UTCDateTime back to a LocalDateTime in the
- time zone that applies.
-
- To subtract a duration from a LocalDateTime, the steps apply in
- reverse:
-
- 1. If a time zone applies to the LocalDateTime, convert it to UTC
- following the semantics in Section 1.4.5.
-
- 2. Subtract any hour, minute, or second components of the duration
- (in absolute time).
-
- 3. Convert the resulting UTCDateTime back to LocalDateTime in the
- time zone that applies.
-
- 4. Subtract any week or day components of the duration from the
- date.
-
- 5. If the resulting time does not exist on the date due to a
- discontinuity in the time zone, use the semantics in
- Section 1.4.5 to convert to UTC and back to get a valid
- LocalDateTime.
-
- These semantics match the iCalendar DURATION value type ([RFC5545],
- Section 3.3.6).
-
-1.4.7. SignedDuration
-
- A SignedDuration represents a length of time that may be positive or
- negative and is typically used to express the offset of a point in
- time relative to an associated time. It is represented as a
- Duration, optionally preceded by a sign character. It is specified
- by the following ABNF:
-
- signed-duration = ["+" / "-"] duration
-
- A negative sign indicates a point in time at or before the associated
- time; a positive or no sign indicates a time at or after the
- associated time.
-
-1.4.8. TimeZoneId
-
- Where "TimeZoneId" is given as a data type, it means a "String" that
- is either a time zone name in the IANA Time Zone Database [TZDB] or a
- custom time zone identifier defined in the "timeZones" property (see
- Section 4.7.2).
-
- Where an IANA time zone is specified, the zone rules of the
- respective zone records apply. Custom time zones are interpreted as
- described in Section 4.7.2.
-
-1.4.9. PatchObject
-
- A PatchObject is of type "String[*]" and represents an unordered set
- of patches on a JSON object. Each key is a path represented in a
- subset of the JSON Pointer format [RFC6901]. The paths have an
- implicit leading "/", so each key is prefixed with "/" before
- applying the JSON Pointer evaluation algorithm.
-
- A patch within a PatchObject is only valid if all of the following
- conditions apply:
-
- 1. The pointer MUST NOT reference inside an array (i.e., you MUST
- NOT insert/delete from an array; the array MUST be replaced in
- its entirety instead).
-
- 2. All parts prior to the last (i.e., the value after the final
- slash) MUST already exist on the object being patched.
-
- 3. There MUST NOT be two patches in the PatchObject where the
- pointer of one is the prefix of the pointer of the other, e.g.,
- "alerts/1/offset" and "alerts".
-
- 4. The value for the patch MUST be valid for the property being set
- (of the correct type and obeying any other applicable
- restrictions), or, if null, the property MUST be optional.
-
- The value associated with each pointer determines how to apply that
- patch:
-
- * If null, remove the property from the patched object. If the key
- is not present in the parent, this a no-op.
-
- * If non-null, set the value given as the value for this property
- (this may be a replacement or addition to the object being
- patched).
-
- A PatchObject does not define its own "@type" property (see
- Section 4.1.1). An "@type" property in a patch MUST be handled as
- any other patched property value.
-
- Implementations MUST reject a PatchObject in its entirety if any of
- its patches are invalid. Implementations MUST NOT apply partial
- patches.
-
- The PatchObject format is used to significantly reduce file size and
- duplicated content when specifying variations to a common object,
- such as with recurring events or when translating the data into
- multiple languages. It can also better preserve semantic intent if
- only the properties that should differ between the two objects are
- patched. For example, if one person is not going to a particular
- instance of a regularly scheduled event, in iCalendar, you would have
- to duplicate the entire event in the override. In JSCalendar, this
- is a small patch to show the difference. As only this property is
- patched, if the location of the event is changed, the occurrence will
- automatically still inherit this.
-
-1.4.10. Relation
-
- A Relation object defines the relation to other objects, using a
- possibly empty set of relation types. The object that defines this
- relation is the linking object, while the other object is the linked
- object. A Relation object has the following properties:
-
- @type: "String" (mandatory)
- This specifies the type of this object. This MUST be "Relation".
-
- relation: "String[Boolean]" (optional, default: empty Object)
- This describes how the linked object is related to the linking
- object. The relation is defined as a set of relation types. If
- empty, the relationship between the two objects is unspecified.
-
- Keys in the set MUST be one of the following values, specified in
- the property definition where the Relation object is used, a value
- registered in the IANA "JSCalendar Enum Values" registry, or a
- vendor-specific value (see Section 3.3):
-
- "first": The linked object is the first in a series the linking
- object is part of.
-
- "next": The linked object is next in a series the linking object
- is part of.
-
- "child": The linked object is a subpart of the linking object.
-
- "parent": The linking object is a subpart of the linked object.
-
- The value for each key in the map MUST be true.
-
-1.4.11. Link
-
- A Link object represents an external resource associated with the
- linking object. It has the following properties:
-
- @type: "String" (mandatory)
- This specifies the type of this object. This MUST be "Link".
-
- href: "String" (mandatory)
- This is a URI [RFC3986] from which the resource may be fetched.
-
- This MAY be a "data:" URL [RFC2397], but it is recommended that
- the file be hosted on a server to avoid embedding arbitrarily
- large data in JSCalendar object instances.
-
- cid: "String" (optional)
- This MUST be a valid "content-id" value according to the
- definition of Section 2 of [RFC2392]. The value MUST be unique
- within this Link object but has no meaning beyond that. It MAY be
- different from the link id for this Link object.
-
- contentType: "String" (optional)
- This is the media type [RFC6838] of the resource, if known.
-
- size: "UnsignedInt" (optional)
- This is the size, in octets, of the resource when fully decoded
- (i.e., the number of octets in the file the user would download),
- if known. Note that this is an informational estimate, and
- implementations must be prepared to handle the actual size being
- quite different when the resource is fetched.
-
- rel: "String" (optional)
- This identifies the relation of the linked resource to the object.
- If set, the value MUST be a relation type from the IANA "Link
- Relations" registry [LINKRELS], as established in [RFC8288].
-
- display: "String" (optional)
- This describes the intended purpose of a link to an image. If
- set, the "rel" property MUST be set to "icon". The value MUST be
- one of the following values, another value registered in the IANA
- "JSCalendar Enum Values" registry, or a vendor-specific value (see
- Section 3.3):
-
- "badge": an image meant to be displayed alongside the title of
- the object
-
- "graphic": a full image replacement for the object itself
-
- "fullsize": an image that is used to enhance the object
-
- "thumbnail": a smaller variant of "fullsize" to be used when
- space for the image is constrained
-
- title: "String" (optional)
- This is a human-readable, plain-text description of the resource.
-
-2. JSCalendar Objects
-
- This section describes the calendar object types specified by
- JSCalendar.
-
-2.1. Event
-
- Media type: "application/jscalendar+json;type=event"
-
- An Event represents a scheduled amount of time on a calendar,
- typically a meeting, appointment, reminder, or anniversary. It is
- required to start at a certain point in time and typically has a non-
- zero duration. Multiple participants may partake in the event at
- multiple locations.
-
- The @type (Section 4.1.1) property value MUST be "Event".
-
-2.2. Task
-
- Media type: "application/jscalendar+json;type=task"
-
- A Task represents an action item, assignment, to-do item, or work
- item. It may start and be due at certain points in time, take some
- estimated time to complete, and recur, none of which is required.
-
- The @type (Section 4.1.1) property value MUST be "Task".
-
-2.3. Group
-
- Media type: "application/jscalendar+json;type=group"
-
- A Group is a collection of Event (Section 2.1) and/or Task
- (Section 2.2) objects. Typically, objects are grouped by topic
- (e.g., by keywords) or calendar membership.
-
- The @type (Section 4.1.1) property value MUST be "Group".
-
-3. Structure of JSCalendar Objects
-
- A JSCalendar object is a JSON object [RFC8259], which MUST be valid
- I-JSON (a stricter subset of JSON) [RFC7493]. Property names and
- values are case sensitive.
-
- The object has a collection of properties, as specified in the
- following sections. Properties are specified as being either
- mandatory or optional. Optional properties may have a default value
- if explicitly specified in the property definition.
-
-3.1. Object Type
-
- JSCalendar objects MUST name their type in the "@type" property if
- not explicitly specified otherwise for the respective object type. A
- notable exception to this rule is the PatchObject (Section 1.4.9).
-
-3.2. Normalization and Equivalence
-
- JSCalendar aims to provide unambiguous definitions for value types
- and properties but does not define a general normalization or
- equivalence method for JSCalendar objects and types. This is because
- the notion of equivalence might range from byte-level equivalence to
- semantic equivalence, depending on the respective use case.
- Normalization of JSCalendar objects is hindered because of the
- following reasons:
-
- * Custom JSCalendar properties may contain arbitrary JSON values,
- including arrays. However, equivalence of arrays might or might
- not depend on the order of elements, depending on the respective
- property definition.
-
- * Several JSCalendar property values are defined as URIs and media
- types, but normalization of these types is inherently protocol and
- scheme specific, depending on the use case of the equivalence
- definition (see Section 6 of [RFC3986]).
-
- Considering this, the definition of equivalence and normalization is
- left to client and server implementations and to be negotiated by a
- calendar exchange protocol or defined elsewhere.
-
-3.3. Vendor-Specific Property Extensions, Values, and Types
-
- Vendors MAY add additional properties to the calendar object to
- support their custom features. To avoid conflict, the names of these
- properties MUST be prefixed by a domain name controlled by the vendor
- followed by a colon, e.g., "example.com:customprop". If the value is
- a new JSCalendar object, it either MUST include an "@type" property,
- or it MUST explicitly be specified to not require a type designator.
- The type name MUST be prefixed with a domain name controlled by the
- vendor.
-
- Some JSCalendar properties allow vendor-specific value extensions.
- Such vendor-specific values MUST be prefixed by a domain name
- controlled by the vendor followed by a colon, e.g.,
- "example.com:customrel".
-
- Vendors are strongly encouraged to register any new property values
- or extensions that are useful to other systems as well, rather than
- use a vendor-specific prefix.
-
-4. Common JSCalendar Properties
-
- This section describes the properties that are common to the various
- JSCalendar object types. Specific JSCalendar object types may only
- support a subset of these properties. The object type definitions in
- Section 5 describe the set of supported properties per type.
-
-4.1. Metadata Properties
-
-4.1.1. @type
-
- Type: "String" (mandatory)
-
- This specifies the type that this object represents. The allowed
- value differs by object type and is defined in Sections 2.1, 2.2, and
- 2.3.
-
-4.1.2. uid
-
- Type: "String" (mandatory)
-
- This is a globally unique identifier used to associate objects
- representing the same event, task, group, or other object across
- different systems, calendars, and views. For recurring events and
- tasks, the UID is associated with the base object and therefore is
- the same for all occurrences; the combination of the UID with a
- "recurrenceId" identifies a particular instance.
-
- The generator of the identifier MUST guarantee that the identifier is
- unique. [RFC4122] describes a range of established algorithms to
- generate universally unique identifiers (UUIDs). UUID version 4,
- described in Section 4.4 of [RFC4122], is RECOMMENDED.
-
- For compatibility with UIDs [RFC5545], implementations MUST be able
- to receive and persist values of at least 255 octets for this
- property, but they MUST NOT truncate values in the middle of a UTF-8
- multi-octet sequence.
-
-4.1.3. relatedTo
-
- Type: "String[Relation]" (optional)
-
- This relates the object to other JSCalendar objects. This is
- represented as a map of the UIDs of the related objects to
- information about the relation.
-
- If an object is split to make a "this and future" change to a
- recurrence, the original object MUST be truncated to end at the
- previous occurrence before this split, and a new object is created to
- represent all the occurrences after the split. A "next" relation
- MUST be set on the original object's "relatedTo" property for the UID
- of the new object. A "first" relation for the UID of the first
- object in the series MUST be set on the new object. Clients can then
- follow these UIDs to get the complete set of objects if the user
- wishes to modify them all at once.
-
-4.1.4. prodId
-
- Type: "String" (optional)
-
- This is the identifier for the product that last updated the
- JSCalendar object. This should be set whenever the data in the
- object is modified (i.e., whenever the "updated" property is set).
-
- The vendor of the implementation MUST ensure that this is a globally
- unique identifier, using some technique such as a Formal Public
- Identifier (FPI) value, as defined in [ISO.9070.1991].
-
- This property SHOULD NOT be used to alter the interpretation of a
- JSCalendar object beyond the semantics specified in this document.
- For example, it is not to be used to further the understanding of
- nonstandard properties, a practice that is known to cause long-term
- interoperability problems.
-
-4.1.5. created
-
- Type: "UTCDateTime" (optional)
-
- This is the date and time this object was initially created.
-
-4.1.6. updated
-
- Type: "UTCDateTime" (mandatory)
-
- This is the date and time the data in this object was last modified
- (or its creation date/time if not modified since).
-
-4.1.7. sequence
-
- Type: "UnsignedInt" (optional, default: 0)
-
- Initially zero, this MUST be incremented by one every time a change
- is made to the object, except if the change only modifies the
- "participants" property (see Section 4.4.6).
-
- This is used as part of the iCalendar Transport-independent
- Interoperability Protocol (iTIP) [RFC5546] to know which version of
- the object a scheduling message relates to.
-
-4.1.8. method
-
- Type: "String" (optional)
-
- This is the iTIP [RFC5546] method, in lowercase. This MUST only be
- present if the JSCalendar object represents an iTIP scheduling
- message.
-
-4.2. What and Where Properties
-
-4.2.1. title
-
- Type: "String" (optional, default: empty String)
-
- This is a short summary of the object.
-
-4.2.2. description
-
- Type: "String" (optional, default: empty String)
-
- This is a longer-form text description of the object. The content is
- formatted according to the "descriptionContentType" property.
-
-4.2.3. descriptionContentType
-
- Type: "String" (optional, default: "text/plain")
-
- This describes the media type [RFC6838] of the contents of the
- "description" property. Media types MUST be subtypes of type "text"
- and SHOULD be "text/plain" or "text/html" [MEDIATYPES]. They MAY
- include parameters, and the "charset" parameter value MUST be "utf-
- 8", if specified. Descriptions of type "text/html" MAY contain "cid"
- URLs [RFC2392] to reference links in the calendar object by use of
- the "cid" property of the Link object.
-
-4.2.4. showWithoutTime
-
- Type: "Boolean" (optional, default: false)
-
- This indicates that the time is not important to display to the user
- when rendering this calendar object. An example of this is an event
- that conceptually occurs all day or across multiple days, such as
- "New Year's Day" or "Italy Vacation". While the time component is
- important for free-busy calculations and checking for scheduling
- clashes, calendars may choose to omit displaying it and/or display
- the object separately to other objects to enhance the user's view of
- their schedule.
-
- Such events are also commonly known as "all-day" events.
-
-4.2.5. locations
-
- Type: "Id[Location]" (optional)
-
- This is a map of location ids to Location objects, representing
- locations associated with the object.
-
- A Location object has the following properties. It MUST have at
- least one property other than the "relativeTo" property.
-
- @type: "String" (mandatory)
- This specifies the type of this object. This MUST be "Location".
-
- name: "String" (optional)
- This is the human-readable name of the location.
-
- description: "String" (optional)
- This is the human-readable, plain-text instructions for accessing
- this location. This may be an address, set of directions, door
- access code, etc.
-
- locationTypes: "String[Boolean]" (optional)
- This is a set of one or more location types that describe this
- location. All types MUST be from the "Location Types Registry"
- [LOCATIONTYPES], as defined in [RFC4589]. The set is represented
- as a map, with the keys being the location types. The value for
- each key in the map MUST be true.
-
- relativeTo: "String" (optional)
- This specifies the relation between this location and the time of
- the JSCalendar object. This is primarily to allow events
- representing travel to specify the location of departure (at the
- start of the event) and location of arrival (at the end); this is
- particularly important if these locations are in different time
- zones, as a client may wish to highlight this information for the
- user.
-
- This MUST be one of the following values, another value registered
- in the IANA "JSCalendar Enum Values" registry, or a vendor-
- specific value (see Section 3.3). Any value the client or server
- doesn't understand should be treated the same as if this property
- is omitted.
-
- "start": The event/task described by this JSCalendar object
- occurs at this location at the time the event/task starts.
-
- "end": The event/task described by this JSCalendar object occurs
- at this location at the time the event/task ends.
-
- timeZone: "TimeZoneId" (optional)
- This is a time zone for this location.
-
- coordinates: "String" (optional)
- This is a "geo:" URI [RFC5870] for the location.
-
- links: "Id[Link]" (optional)
- This is a map of link ids to Link objects, representing external
- resources associated with this location, for example, a vCard or
- image. If there are no links, this MUST be omitted (rather than
- specified as an empty set).
-
-4.2.6. virtualLocations
-
- Type: "Id[VirtualLocation]" (optional)
-
- This is a map of virtual location ids to VirtualLocation objects,
- representing virtual locations, such as video conferences or chat
- rooms, associated with the object.
-
- A VirtualLocation object has the following properties.
-
- @type: "String" (mandatory)
- This specifies the type of this object. This MUST be
- "VirtualLocation".
-
- name: "String" (optional, default: empty String)
- This is the human-readable name of the virtual location.
-
- description: "String" (optional)
- These are human-readable plain-text instructions for accessing
- this virtual location. This may be a conference access code, etc.
-
- uri: "String" (mandatory)
- This is a URI [RFC3986] that represents how to connect to this
- virtual location.
-
- This may be a telephone number (represented using the "tel:"
- scheme, e.g., "tel:+1-555-555-5555") for a teleconference, a web
- address for online chat, or any custom URI.
-
- features: "String[Boolean]" (optional)
- A set of features supported by this virtual location. The set is
- represented as a map, with the keys being the feature. The value
- for each key in the map MUST be true.
-
- The feature MUST be one of the following values, another value
- registered in the IANA "JSCalendar Enum Values" registry, or a
- vendor-specific value (see Section 3.3). Any value the client or
- server doesn't understand should be treated the same as if this
- feature is omitted.
-
- audio: Audio conferencing
-
- chat: Chat or instant messaging
-
- feed: Blog or atom feed
-
- moderator: Provides moderator-specific features
-
- phone: Phone conferencing
-
- screen: Screen sharing
-
- video: Video conferencing
-
-4.2.7. links
-
- Type: "Id[Link]" (optional)
-
- This is a map of link ids to Link objects, representing external
- resources associated with the object.
-
- Links with a rel of "enclosure" MUST be considered by the client to
- be attachments for download.
-
- Links with a rel of "describedby" MUST be considered by the client to
- be alternative representations of the description.
-
- Links with a rel of "icon" MUST be considered by the client to be
- images that it may use when presenting the calendar data to a user.
- The "display" property may be set to indicate the purpose of this
- image.
-
-4.2.8. locale
-
- Type: "String" (optional)
-
- This is the language tag, as defined in [RFC5646], that best
- describes the locale used for the text in the calendar object, if
- known.
-
-4.2.9. keywords
-
- Type: "String[Boolean]" (optional)
-
- This is a set of keywords or tags that relate to the object. The set
- is represented as a map, with the keys being the keywords. The value
- for each key in the map MUST be true.
-
-4.2.10. categories
-
- Type: "String[Boolean]" (optional)
-
- This is a set of categories that relate to the calendar object. The
- set is represented as a map, with the keys being the categories
- specified as URIs. The value for each key in the map MUST be true.
-
- In contrast to keywords, categories are typically structured. For
- example, a vendor owning the domain "example.com" might define the
- categories "http://example.com/categories/sports/american-football"
- and "http://example.com/categories/music/r-b".
-
-4.2.11. color
-
- Type: "String" (optional)
-
- This is a color clients MAY use when displaying this calendar object.
- The value is a color name taken from the set of names defined in
- Section 4.3 of CSS Color Module Level 3 [COLORS] or an RGB value in
- hexadecimal notation, as defined in Section 4.2.1 of CSS Color Module
- Level 3.
-
-4.3. Recurrence Properties
-
- Some events and tasks occur at regular or irregular intervals.
- Rather than having to copy the data for every occurrence, there can
- be a base event with rules to generate recurrences and/or overrides
- that add extra dates or exceptions to the rules.
-
- The recurrence set is the complete set of instances for an object.
- It is generated by considering the following properties in order, all
- of which are optional:
-
- 1. The "recurrenceRules" property (Section 4.3.3) generates a set of
- extra date-times on which the object occurs.
-
- 2. The "excludedRecurrenceRules" property (Section 4.3.4) generates
- a set of date-times that are to be removed from the previously
- generated set of date-times on which the object occurs.
-
- 3. The "recurrenceOverrides" property (Section 4.3.5) defines date-
- times that are added or excluded to form the final set. (This
- property may also contain changes to the object to apply to
- particular instances.)
-
-4.3.1. recurrenceId
-
- Type: "LocalDateTime" (optional)
-
- If present, this JSCalendar object represents one occurrence of a
- recurring JSCalendar object. If present, the "recurrenceRules" and
- "recurrenceOverrides" properties MUST NOT be present.
-
- The value is a date-time either produced by the "recurrenceRules" of
- the base event or added as a key to the "recurrenceOverrides"
- property of the base event.
-
-4.3.2. recurrenceIdTimeZone
-
- Type: "TimeZoneId|null" (optional, default: null)
-
- Identifies the time zone of the main JSCalendar object, of which this
- JSCalendar object is a recurrence instance. This property MUST be
- set if the "recurrenceId" property is set. It MUST NOT be set if the
- "recurrenceId" property is not set.
-
-4.3.3. recurrenceRules
-
- Type: "RecurrenceRule[]" (optional)
-
- This defines a set of recurrence rules (repeating patterns) for
- recurring calendar objects.
-
- An Event recurs by applying the recurrence rules to the "start" date-
- time.
-
- A Task recurs by applying the recurrence rules to the "start" date-
- time, if defined; otherwise, it recurs by the "due" date-time, if
- defined. If the task defines neither a "start" nor "due" date-time,
- it MUST NOT define a "recurrenceRules" property.
-
- If multiple recurrence rules are given, each rule is to be applied,
- and then the union of the results are used, ignoring any duplicates.
-
- A RecurrenceRule object is a JSON object mapping of a RECUR value
- type in iCalendar [RFC5545] [RFC7529] and has the same semantics. It
- has the following properties:
-
- @type: "String" (mandatory)
- This specifies the type of this object. This MUST be
- "RecurrenceRule".
-
- frequency: "String" (mandatory)
- This is the time span covered by each iteration of this recurrence
- rule (see Section 4.3.3.1 for full semantics). This MUST be one
- of the following values:
-
- * "yearly"
-
- * "monthly"
-
- * "weekly"
-
- * "daily"
-
- * "hourly"
-
- * "minutely"
-
- * "secondly"
-
- This is the FREQ part from iCalendar, converted to lowercase.
-
- interval: "UnsignedInt" (optional, default: 1)
- This is the interval of iteration periods at which the recurrence
- repeats. If included, it MUST be an integer >= 1.
-
- This is the INTERVAL part from iCalendar.
-
- rscale: "String" (optional, default: "gregorian")
- This is the calendar system in which this recurrence rule
- operates, in lowercase. This MUST be either a CLDR-registered
- calendar system name [CLDR] or a vendor-specific value (see
- Section 3.3).
-
- This is the RSCALE part from iCalendar RSCALE [RFC7529], converted
- to lowercase.
-
- skip: "String" (optional, default: "omit")
- This is the behavior to use when the expansion of the recurrence
- produces invalid dates. This property only has an effect if the
- frequency is "yearly" or "monthly". It MUST be one of the
- following values:
-
- * "omit"
-
- * "backward"
-
- * "forward"
-
- This is the SKIP part from iCalendar RSCALE [RFC7529], converted
- to lowercase.
-
- firstDayOfWeek: "String" (optional, default: "mo")
- This is the day on which the week is considered to start,
- represented as a lowercase, abbreviated, and two-letter English
- day of the week. If included, it MUST be one of the following
- values:
-
- * "mo"
-
- * "tu"
-
- * "we"
-
- * "th"
-
- * "fr"
-
- * "sa"
-
- * "su"
-
- This is the WKST part from iCalendar.
-
- byDay: "NDay[]" (optional)
- These are days of the week on which to repeat. An "NDay" object
- has the following properties:
-
- @type: "String" (mandatory)
- This specifies the type of this object. This MUST be "NDay".
-
- day: "String" (mandatory)
- This is a day of the week on which to repeat; the allowed
- values are the same as for the "firstDayOfWeek" recurrenceRule
- property.
-
- This is the day of the week of the BYDAY part in iCalendar,
- converted to lowercase.
-
- nthOfPeriod: "Int" (optional)
- If present, rather than representing every occurrence of the
- weekday defined in the "day" property, it represents only a
- specific instance within the recurrence period. The value can
- be positive or negative but MUST NOT be zero. A negative
- integer means the nth-last occurrence within that period (i.e.,
- -1 is the last occurrence, -2 the one before that, etc.).
-
- This is the ordinal part of the BYDAY value in iCalendar (e.g.,
- 1 or -3).
-
- byMonthDay: "Int[]" (optional)
- These are the days of the month on which to repeat. Valid values
- are between 1 and the maximum number of days any month may have in
- the calendar given by the "rscale" property and the negative
- values of these numbers. For example, in the Gregorian calendar,
- valid values are 1 to 31 and -31 to -1. Negative values offset
- from the end of the month. The array MUST have at least one entry
- if included.
-
- This is the BYMONTHDAY part in iCalendar.
-
- byMonth: "String[]" (optional)
- These are the months in which to repeat. Each entry is a string
- representation of a number, starting from "1" for the first month
- in the calendar (e.g., "1" means January with the Gregorian
- calendar), with an optional "L" suffix (see [RFC7529]) for leap
- months (this MUST be uppercase, e.g., "3L"). The array MUST have
- at least one entry if included.
-
- This is the BYMONTH part from iCalendar.
-
- byYearDay: "Int[]" (optional)
- These are the days of the year on which to repeat. Valid values
- are between 1 and the maximum number of days any year may have in
- the calendar given by the "rscale" property and the negative
- values of these numbers. For example, in the Gregorian calendar,
- valid values are 1 to 366 and -366 to -1. Negative values offset
- from the end of the year. The array MUST have at least one entry
- if included.
-
- This is the BYYEARDAY part from iCalendar.
-
- byWeekNo: "Int[]" (optional)
- These are the weeks of the year in which to repeat. Valid values
- are between 1 and the maximum number of weeks any year may have in
- the calendar given by the "rscale" property and the negative
- values of these numbers. For example, in the Gregorian calendar,
- valid values are 1 to 53 and -53 to -1. The array MUST have at
- least one entry if included.
-
- This is the BYWEEKNO part from iCalendar.
-
- byHour: "UnsignedInt[]" (optional)
- These are the hours of the day in which to repeat. Valid values
- are 0 to 23. The array MUST have at least one entry if included.
- This is the BYHOUR part from iCalendar.
-
- byMinute: "UnsignedInt[]" (optional)
- These are the minutes of the hour in which to repeat. Valid
- values are 0 to 59. The array MUST have at least one entry if
- included.
-
- This is the BYMINUTE part from iCalendar.
-
- bySecond: "UnsignedInt[]" (optional)
- These are the seconds of the minute in which to repeat. Valid
- values are 0 to 60. The array MUST have at least one entry if
- included.
-
- This is the BYSECOND part from iCalendar.
-
- bySetPosition: "Int[]" (optional)
- These are the occurrences within the recurrence interval to
- include in the final results. Negative values offset from the end
- of the list of occurrences. The array MUST have at least one
- entry if included. This is the BYSETPOS part from iCalendar.
-
- count: "UnsignedInt" (optional)
- These are the number of occurrences at which to range-bound the
- recurrence. This MUST NOT be included if an "until" property is
- specified.
-
- This is the COUNT part from iCalendar.
-
- until: "LocalDateTime" (optional)
- These are the date-time at which to finish recurring. The last
- occurrence is on or before this date-time. This MUST NOT be
- included if a "count" property is specified. Note that if not
- specified otherwise for a specific JSCalendar object, this date is
- to be interpreted in the time zone specified in the JSCalendar
- object's "timeZone" property.
-
- This is the UNTIL part from iCalendar.
-
-4.3.3.1. Interpreting Recurrence Rules
-
- A recurrence rule specifies a set of date-times for recurring
- calendar objects. A recurrence rule has the following semantics.
- Note that wherever "year", "month", or "day of month" is used, this
- is within the calendar system given by the "rscale" property, which
- defaults to "gregorian" if omitted.
-
- 1. A set of candidates is generated. This is every second within a
- period defined by the "frequency" property value:
-
- "yearly": every second from midnight on the first day of a year
- (inclusive) to midnight the first day of the following year
- (exclusive).
-
- If skip is not "omit", the calendar system has leap months,
- and there is a "byMonth" property, generate candidates for the
- leap months, even if they don't occur in this year.
-
- If skip is not "omit" and there is a "byMonthDay" property,
- presume each month has the maximum number of days any month
- may have in this calendar system when generating candidates,
- even if it's more than this month actually has.
-
- "monthly": every second from midnight on the first day of a
- month (inclusive) to midnight on the first of the following
- month (exclusive).
-
- If skip is not "omit" and there is a "byMonthDay" property,
- presume the month has the maximum number of days any month may
- have in this calendar system when generating candidates, even
- if it's more than this month actually has.
-
- "weekly": every second from midnight (inclusive) on the first
- day of the week (as defined by the "firstDayOfWeek" property
- or Monday if omitted) to midnight seven days later
- (exclusive).
-
- "daily": every second from midnight at the start of the day
- (inclusive) to midnight at the end of the day (exclusive).
-
- "hourly": every second from the beginning of the hour
- (inclusive) to the beginning of the next hour (exclusive).
-
- "minutely": every second from the beginning of the minute
- (inclusive) to the beginning of the next minute (exclusive).
-
- "secondly": only the second itself.
-
- 2. Each date-time candidate is compared against all of the byX
- properties of the rule except bySetPosition. If any property in
- the rule does not match the date-time, the date-time is
- eliminated. Each byX property is an array; the date-time matches
- the property if it matches any of the values in the array. The
- properties have the following semantics:
-
- byMonth: The date-time is in the given month.
-
- byWeekNo: The date-time is in the nth week of the year.
- Negative numbers mean the nth last week of the year. This
- corresponds to weeks according to week numbering, as defined
- in ISO.8601.2004, with a week defined as a seven-day period,
- starting on the "firstDayOfWeek" property value or Monday if
- omitted. Week number one of the calendar year is the first
- week that contains at least four days in that calendar year.
-
- If the date-time is not valid (this may happen when generating
- candidates with a "skip" property in effect), it is always
- eliminated by this property.
-
- byYearDay: The date-time is on the nth day of year. Negative
- numbers mean the nth last day of the year.
-
- If the date-time is not valid (this may happen when generating
- candidates with a "skip" property in effect), it is always
- eliminated by this property.
-
- byMonthDay: The date-time is on the given day of the month.
- Negative numbers mean the nth last day of the month.
-
- byDay: The date-time is on the given day of the week. If the
- day is prefixed by a number, it is the nth occurrence of that
- day of the week within the month (if frequency is monthly) or
- year (if frequency is yearly). Negative numbers mean the nth
- last occurrence within that period.
-
- byHour: The date-time has the given hour value.
-
- byMinute: The date-time has the given minute value.
-
- bySecond: The date-time has the given second value.
-
- If a "skip" property is defined and is not "omit", there may be
- candidates that do not correspond to valid dates (e.g., February
- 31st in the Gregorian calendar). In this case, the properties
- MUST be considered in the order above, and:
-
- 1. After applying the byMonth filter, if the candidate's month
- is invalid for the given year, increment it (if skip is
- "forward") or decrement it (if skip is "backward") until a
- valid month is found, incrementing/decrementing the year as
- well if passing through the beginning/end of the year. This
- only applies to calendar systems with leap months.
-
- 2. After applying the byMonthDay filter, if the day of the month
- is invalid for the given month and year, change the date to
- the first day of the next month (if skip is "forward") or the
- last day of the current month (if skip is "backward").
-
- 3. If any valid date produced after applying the skip is already
- a candidate, eliminate the duplicate. (For example, after
- adjusting, February 30th and February 31st would both become
- the same "real" date, so one is eliminated as a duplicate.)
-
- 3. If a "bySetPosition" property is included, this is now applied to
- the ordered list of remaining dates. This property specifies the
- indexes of date-times to keep; all others should be eliminated.
- Negative numbers are indexed from the end of the list, with -1
- being the last item, -2 the second from last, etc.
-
- 4. Any date-times before the start date of the event are eliminated
- (see below for why this might be needed).
-
- 5. If a "skip" property is included and is not "omit", eliminate any
- date-times that have already been produced by previous iterations
- of the algorithm. (This is not possible if skip is "omit".)
-
- 6. If further dates are required (we have not reached the until date
- or count limit), skip the next (interval - 1) sets of candidates,
- then continue from step 1.
-
- When determining the set of occurrence dates for an event or task,
- the following extra rules must be applied:
-
- 1. The initial date-time to which the rule is applied (the "start"
- date-time for events or the "start" or "due" date-time for tasks)
- is always the first occurrence in the expansion (and is counted
- if the recurrence is limited by a "count" property), even if it
- would normally not match the rule.
-
- 2. The first set of candidates to consider is that which would
- contain the initial date-time. This means the first set may
- include candidates before the initial date-time; such candidates
- are eliminated from the results in step 4 of the list above.
-
- 3. The following properties MUST be implicitly added to the rule
- under the given conditions:
-
- * If frequency is not "secondly" and there is no "bySecond"
- property, add a "bySecond" property with the sole value being
- the seconds value of the initial date-time.
-
- * If frequency is not "secondly" or "minutely" and there is no
- "byMinute" property, add a "byMinute" property with the sole
- value being the minutes value of the initial date-time.
-
- * If frequency is not "secondly", "minutely", or "hourly" and
- there is no "byHour" property, add a "byHour" property with
- the sole value being the hours value of the initial date-time.
-
- * If frequency is "weekly" and there is no "byDay" property, add
- a "byDay" property with the sole value being the day of the
- week of the initial date-time.
-
- * If frequency is "monthly" and there is no "byDay" property and
- no "byMonthDay" property, add a "byMonthDay" property with the
- sole value being the day of the month of the initial date-
- time.
-
- * If frequency is "yearly" and there is no "byYearDay" property:
-
- - If there are no "byMonth" or "byWeekNo" properties, and
- either there is a "byMonthDay" property or there is no
- "byDay" property, add a "byMonth" property with the sole
- value being the month of the initial date-time.
-
- - If there are no "byMonthDay", "byWeekNo", or "byDay"
- properties, add a "byMonthDay" property with the sole value
- being the day of the month of the initial date-time.
-
- - If there is a "byWeekNo" property and no "byMonthDay" or
- "byDay" properties, add a "byDay" property with the sole
- value being the day of the week of the initial date-time.
-
-4.3.4. excludedRecurrenceRules
-
- Type: "RecurrenceRule[]" (optional)
-
- This defines a set of recurrence rules (repeating patterns) for date-
- times on which the object will not occur. The rules are interpreted
- the same as for the "recurrenceRules" property (see Section 4.3.3),
- with the exception that the initial date-time to which the rule is
- applied (the "start" date-time for events or the "start" or "due"
- date-time for tasks) is only considered part of the expansion if it
- matches the rule. The resulting set of date-times is then removed
- from those generated by the "recurrenceRules" property, as described
- in Section 4.3.
-
-4.3.5. recurrenceOverrides
-
- Type: "LocalDateTime[PatchObject]" (optional)
-
- Maps recurrence ids (the date-time produced by the recurrence rule)
- to the overridden properties of the recurrence instance.
-
- If the recurrence id does not match a date-time from the recurrence
- rule (or no rule is specified), it is to be treated as an additional
- occurrence (like an RDATE from iCalendar). The patch object may
- often be empty in this case.
-
- If the patch object defines the "excluded" property of an occurrence
- to be true, this occurrence is omitted from the final set of
- recurrences for the calendar object (like an EXDATE from iCalendar).
- Such a patch object MUST NOT patch any other property.
-
- By default, an occurrence inherits all properties from the main
- object except the start (or due) date-time, which is shifted to match
- the recurrence id LocalDateTime. However, individual properties of
- the occurrence can be modified by a patch or multiple patches. It is
- valid to patch the "start" property value, and this patch takes
- precedence over the value generated from the recurrence id. Both the
- recurrence id as well as the patched "start" date-time may occur
- before the original JSCalendar object's "start" or "due" date.
-
- A pointer in the PatchObject MUST be ignored if it starts with one of
- the following prefixes:
-
- * @type
-
- * excludedRecurrenceRules
-
- * method
-
- * privacy
-
- * prodId
-
- * recurrenceId
-
- * recurrenceIdTimeZone
-
- * recurrenceOverrides
-
- * recurrenceRules
-
- * relatedTo
-
- * replyTo
-
- * sentBy
-
- * timeZones
-
- * uid
-
-4.3.6. excluded
-
- Type: "Boolean" (optional, default: false)
-
- This defines if this object is an overridden, excluded instance of a
- recurring JSCalendar object (see Section 4.3.5). If this property
- value is true, this calendar object instance MUST be removed from the
- occurrence expansion. The absence of this property, or the presence
- of its default value as false, indicates that this instance MUST be
- included in the occurrence expansion.
-
-4.4. Sharing and Scheduling Properties
-
-4.4.1. priority
-
- Type: "Int" (optional, default: 0)
-
- This specifies a priority for the calendar object. This may be used
- as part of scheduling systems to help resolve conflicts for a time
- period.
-
- The priority is specified as an integer in the range 0 to 9. A value
- of 0 specifies an undefined priority, for which the treatment will
- vary by situation. A value of 1 is the highest priority. A value of
- 2 is the second highest priority. Subsequent numbers specify a
- decreasing ordinal priority. A value of 9 is the lowest priority.
- Other integer values are reserved for future use.
-
-4.4.2. freeBusyStatus
-
- Type: "String" (optional, default: "busy")
-
- This specifies how this calendar object should be treated when
- calculating free-busy state. This MUST be one of the following
- values, another value registered in the IANA "JSCalendar Enum Values"
- registry, or a vendor-specific value (see Section 3.3):
-
- "free": The object should be ignored when calculating whether the
- user is busy.
-
- "busy": The object should be included when calculating whether the
- user is busy.
-
-4.4.3. privacy
-
- Type: "String" (optional, default: "public")
-
- Calendar objects are normally collected together and may be shared
- with other users. The privacy property allows the object owner to
- indicate that it should not be shared or should only have the time
- information shared but the details withheld. Enforcement of the
- restrictions indicated by this property is up to the API via which
- this object is accessed.
-
- This property MUST NOT affect the information sent to scheduled
- participants; it is only interpreted by protocols that share the
- calendar objects belonging to one user with other users.
-
- The value MUST be one of the following values, another value
- registered in the IANA "JSCalendar Enum Values" registry, or a
- vendor-specific value (see Section 3.3). Any value the client or
- server doesn't understand should be preserved but treated as
- equivalent to "private".
-
- "public": The full details of the object are visible to those whom
- the object's calendar is shared with.
-
- "private": The details of the object are hidden; only the basic time
- and metadata are shared. The following properties MAY be shared;
- any other properties MUST NOT be shared:
-
- * @type
-
- * created
-
- * due
-
- * duration
-
- * estimatedDuration
-
- * freeBusyStatus
-
- * privacy
-
- * recurrenceOverrides (Only patches that apply to another
- permissible property are allowed to be shared.)
-
- * sequence
-
- * showWithoutTime
-
- * start
-
- * timeZone
-
- * timeZones
-
- * uid
-
- * updated
-
- "secret": The object is hidden completely (as though it did not
- exist) when the calendar this object is in is shared.
-
-4.4.4. replyTo
-
- Type: "String[String]" (optional)
-
- This represents methods by which participants may submit their
- response to the organizer of the calendar object. The keys in the
- property value are the available methods and MUST only contain ASCII
- alphanumeric characters (A-Za-z0-9). The value is a URI for the
- method specified in the key. Future methods may be defined in future
- specifications and registered with IANA; a calendar client MUST
- ignore any method it does not understand but MUST preserve the method
- key and URI. This property MUST be omitted if no method is defined
- (rather than being specified as an empty object).
-
- The following methods are defined:
-
- "imip": The organizer accepts an iCalendar Message-Based
- Interoperability Protocol (iMIP) [RFC6047] response at this email
- address. The value MUST be a "mailto:" URI.
-
- "web": Opening this URI in a web browser will provide the user with
- a page where they can submit a reply to the organizer. The value
- MUST be a URL using the "https:" scheme.
-
- "other": The organizer is identified by this URI, but the method for
- submitting the response is undefined.
-
-4.4.5. sentBy
-
- Type: "String" (optional)
-
- This is the email address in the "From" header of the email in which
- this calendar object was received. This is only relevant if the
- calendar object is received via iMIP or as an attachment to a
- message. If set, the value MUST be a valid "addr-spec" value as
- defined in Section 3.4.1 of [RFC5322].
-
-4.4.6. participants
-
- Type: "Id[Participant]" (optional)
-
- This is a map of participant ids to participants, describing their
- participation in the calendar object.
-
- If this property is set and any participant has a "sendTo" property,
- then the "replyTo" property of this calendar object MUST define at
- least one reply method.
-
- A Participant object has the following properties:
-
- @type: "String" (mandatory)
- This specifies the type of this object. This MUST be
- "Participant".
-
- name: "String" (optional)
- This is the display name of the participant (e.g., "Joe Bloggs").
-
- email: "String" (optional)
- This is the email address to use to contact the participant or,
- for example, match with an address book entry. If set, the value
- MUST be a valid "addr-spec" value as defined in Section 3.4.1 of
- [RFC5322].
-
- description: "String" (optional)
- This is a plain-text description of this participant. For
- example, this may include more information about their role in the
- event or how best to contact them.
-
- sendTo: "String[String]" (optional)
- This represents methods by which the participant may receive the
- invitation and updates to the calendar object.
-
- The keys in the property value are the available methods and MUST
- only contain ASCII alphanumeric characters (A-Za-z0-9). The value
- is a URI for the method specified in the key. Future methods may
- be defined in future specifications and registered with IANA; a
- calendar client MUST ignore any method it does not understand but
- MUST preserve the method key and URI. This property MUST be
- omitted if no method is defined (rather than being specified as an
- empty object).
-
- The following methods are defined:
-
- "imip": The participant accepts an iMIP [RFC6047] request at this
- email address. The value MUST be a "mailto:" URI. It MAY be
- different from the value of the participant's "email" property.
-
- "other": The participant is identified by this URI, but the
- method for submitting the invitation is undefined.
-
- kind: "String" (optional)
- This is what kind of entity this participant is, if known.
-
- This MUST be one of the following values, another value registered
- in the IANA "JSCalendar Enum Values" registry, or a vendor-
- specific value (see Section 3.3). Any value the client or server
- doesn't understand should be treated the same as if this property
- is omitted.
-
- "individual": a single person
-
- "group": a collection of people invited as a whole
-
- "location": a physical location that needs to be scheduled, e.g.,
- a conference room
-
- "resource": a non-human resource other than a location, such as a
- projector
-
- roles: "String[Boolean]" (mandatory)
- This is a set of roles that this participant fulfills.
-
- At least one role MUST be specified for the participant. The keys
- in the set MUST be one of the following values, another value
- registered in the IANA "JSCalendar Enum Values" registry, or a
- vendor-specific value (see Section 3.3):
-
- "owner": The participant is an owner of the object. This
- signifies they have permission to make changes to it that
- affect the other participants. Nonowner participants may only
- change properties that affect only themselves (for example,
- setting their own alerts or changing their RSVP status).
-
- "attendee": The participant is expected to be present at the
- event.
-
- "optional": The participant's involvement with the event is
- optional. This is expected to be primarily combined with the
- "attendee" role.
-
- "informational": The participant is copied for informational
- reasons and is not expected to attend.
-
- "chair": The participant is in charge of the event/task when it
- occurs.
-
- "contact": The participant is someone that may be contacted for
- information about the event.
-
- The value for each key in the map MUST be true. It is expected
- that no more than one of the roles "attendee" and "informational"
- be present; if more than one are given, "attendee" takes
- precedence over "informational". Roles that are unknown to the
- implementation MUST be preserved.
-
- locationId: "Id" (optional)
- This is the location at which this participant is expected to be
- attending.
-
- If the value does not correspond to any location id in the
- "locations" property of the JSCalendar object, this MUST be
- treated the same as if the participant's locationId were omitted.
-
- language: "String" (optional)
- This is the language tag, as defined in [RFC5646], that best
- describes the participant's preferred language, if known.
-
- participationStatus: "String" (optional, default: "needs-action")
- This is the participation status, if any, of this participant.
-
- The value MUST be one of the following values, another value
- registered in the IANA "JSCalendar Enum Values" registry, or a
- vendor-specific value (see Section 3.3):
-
- "needs-action": No status has yet been set by the participant.
-
- "accepted": The invited participant will participate.
-
- "declined": The invited participant will not participate.
-
- "tentative": The invited participant may participate.
-
- "delegated": The invited participant has delegated their
- attendance to another participant, as specified in the
- "delegatedTo" property.
-
- participationComment: "String" (optional)
- This is a note from the participant to explain their participation
- status.
-
- expectReply: "Boolean" (optional, default: false)
- If true, the organizer is expecting the participant to notify them
- of their participation status.
-
- scheduleAgent: "String" (optional, default: "server")
- This is who is responsible for sending scheduling messages with
- this calendar object to the participant.
-
- The value MUST be one of the following values, another value
- registered in the IANA "JSCalendar Enum Values" registry, or a
- vendor-specific value (see Section 3.3):
-
- "server": The calendar server will send the scheduling messages.
-
- "client": The calendar client will send the scheduling messages.
-
- "none": No scheduling messages are to be sent to this
- participant.
-
- scheduleForceSend: "Boolean" (optional, default: false)
- A client may set the property on a participant to true to request
- that the server send a scheduling message to the participant when
- it would not normally do so (e.g., if no significant change is
- made the object or the scheduleAgent is set to client). The
- property MUST NOT be stored in the JSCalendar object on the server
- or appear in a scheduling message.
-
- scheduleSequence: "UnsignedInt" (optional, default: 0)
- This is the sequence number of the last response from the
- participant. If defined, this MUST be a nonnegative integer.
-
- This can be used to determine whether the participant has sent a
- new response following significant changes to the calendar object
- and to determine if future responses are responding to a current
- or older view of the data.
-
- scheduleStatus: "String[]" (optional)
- This is a list of status codes, returned from the processing of
- the most recent scheduling message sent to this participant. The
- status codes MUST be valid "statcode" values as defined in the
- ABNF in Section 3.8.8.3 of [RFC5545].
-
- Servers MUST only add or change this property when they send a
- scheduling message to the participant. Clients SHOULD NOT change
- or remove this property if it was provided by the server. Clients
- MAY add, change, or remove the property for participants where the
- client is handling the scheduling.
-
- This property MUST NOT be included in scheduling messages.
-
- scheduleUpdated: "UTCDateTime" (optional)
- This is the timestamp for the most recent response from this
- participant.
-
- This is the "updated" property of the last response when using
- iTIP. It can be compared to the "updated" property in future
- responses to detect and discard older responses delivered out of
- order.
-
- sentBy: "String" (optional)
- This is the email address in the "From" header of the email that
- last updated this participant via iMIP. This SHOULD only be set
- if the email address is different to that in the mailto URI of
- this participant's "imip" method in the "sendTo" property (i.e.,
- the response was received from a different address to that which
- the invitation was sent to). If set, the value MUST be a valid
- "addr-spec" value as defined in Section 3.4.1 of [RFC5322].
-
- invitedBy: "Id" (optional)
- This is the id of the participant who added this participant to
- the event/task, if known.
-
- delegatedTo: "Id[Boolean]" (optional)
- This is set of participant ids that this participant has delegated
- their participation to. Each key in the set MUST be the id of a
- participant. The value for each key in the map MUST be true. If
- there are no delegates, this MUST be omitted (rather than
- specified as an empty set).
-
- delegatedFrom: "Id[Boolean]" (optional)
- This is a set of participant ids that this participant is acting
- as a delegate for. Each key in the set MUST be the id of a
- participant. The value for each key in the map MUST be true. If
- there are no delegators, this MUST be omitted (rather than
- specified as an empty set).
-
- memberOf: "Id[Boolean]" (optional)
- This is a set of group participants that were invited to this
- calendar object, which caused this participant to be invited due
- to their membership in the group(s). Each key in the set MUST be
- the id of a participant. The value for each key in the map MUST
- be true. If there are no groups, this MUST be omitted (rather
- than specified as an empty set).
-
- links: "Id[Link]" (optional)
- This is a map of link ids to Link objects, representing external
- resources associated with this participant, for example, a vCard
- or image. If there are no links, this MUST be omitted (rather
- than specified as an empty set).
-
- progress: "String" (optional; only allowed for participants of a
- Task)
- This represents the progress of the participant for this task. It
- MUST NOT be set if the "participationStatus" of this participant
- is any value other than "accepted". See Section 5.2.5 for allowed
- values and semantics.
-
- progressUpdated: "UTCDateTime" (optional; only allowed for
- participants of a Task)
- This specifies the date-time the "progress" property was last set
- on this participant. See Section 5.2.6 for allowed values and
- semantics.
-
- percentComplete: "UnsignedInt" (optional; only allowed for
- participants of a Task)
- This represents the percent completion of the participant for this
- task. The property value MUST be a positive integer between 0 and
- 100.
-
-4.4.7. requestStatus
-
- Type: "String" (optional)
-
- A request status as returned from processing the most recent
- scheduling request for this JSCalendar object. The allowed values
- are defined by the ABNF definitions of "statcode", "statdesc" and
- "extdata" in Section 3.8.8.3 of [RFC5545] and the following ABNF
- [RFC5234]:
-
- reqstatus = statcode ";" statdesc [";" extdata]
-
- Servers MUST only add or change this property when they performe a
- scheduling action. Clients SHOULD NOT change or remove this property
- if it was provided by the server. Clients MAY add, change, or remove
- the property when the client is handling the scheduling.
-
- This property MUST only be included in scheduling messages according
- to the rules defined for the REQUEST-STATUS iCalendar property in
- [RFC5546].
-
-4.5. Alerts Properties
-
-4.5.1. useDefaultAlerts
-
- Type: "Boolean" (optional, default: false)
-
- If true, use the user's default alerts and ignore the value of the
- "alerts" property. Fetching user defaults is dependent on the API
- from which this JSCalendar object is being fetched and is not defined
- in this specification. If an implementation cannot determine the
- user's default alerts, or none are set, it MUST process the "alerts"
- property as if "useDefaultAlerts" is set to false.
-
-4.5.2. alerts
-
- Type: "Id[Alert]" (optional)
-
- This is a map of alert ids to Alert objects, representing alerts/
- reminders to display or send to the user for this calendar object.
-
- An Alert object has the following properties:
-
- @type: "String" (mandatory)
- This specifies the type of this object. This MUST be "Alert".
-
- trigger: "OffsetTrigger|AbsoluteTrigger|UnknownTrigger"
- (mandatory)
- This defines when to trigger the alert. New types may be defined
- in future documents.
-
- An "OffsetTrigger" object has the following properties:
-
- @type: "String" (mandatory)
- This specifies the type of this object. This MUST be
- "OffsetTrigger".
-
- offset: "SignedDuration" (mandatory)
- This defines the offset at which to trigger the alert relative
- to the time property defined in the "relativeTo" property of
- the alert. Negative durations signify alerts before the time
- property; positive durations signify alerts after the time
- property.
-
- relativeTo: "String" (optional, default: "start")
- This specifies the time property that the alert offset is
- relative to. The value MUST be one of the following:
-
- "start": triggers the alert relative to the start of the
- calendar object
-
- "end": triggers the alert relative to the end/due time of the
- calendar object
-
- An "AbsoluteTrigger" object has the following properties:
-
- @type: "String" (mandatory)
- This specifies the type of this object. This MUST be
- "AbsoluteTrigger".
-
- when: "UTCDateTime" (mandatory)
- This defines a specific UTC date-time when the alert is
- triggered.
-
- An "UnknownTrigger" object is an object that contains an "@type"
- property whose value is not recognized (i.e., not "OffsetTrigger"
- or "AbsoluteTrigger") plus zero or more other properties. This is
- for compatibility with client extensions and future
- specifications. Implementations SHOULD NOT trigger for trigger
- types they do not understand but MUST preserve them.
-
- acknowledged: "UTCDateTime" (optional)
- This records when an alert was last acknowledged. This is set
- when the user has dismissed the alert; other clients that sync
- this property SHOULD automatically dismiss or suppress duplicate
- alerts (alerts with the same alert id that triggered on or before
- this date-time).
-
- For a recurring calendar object, setting the "acknowledged"
- property MUST NOT add a new override to the "recurrenceOverrides"
- property. If the alert is not already overridden, the
- "acknowledged" property MUST be set on the alert in the base
- event/task.
-
- Certain kinds of alert action may not provide feedback as to when
- the user sees them, for example, email-based alerts. For those
- kinds of alerts, this property MUST be set immediately when the
- alert is triggered and the action is successfully carried out.
-
- relatedTo: "String[Relation]" (optional)
- This relates this alert to other alerts in the same JSCalendar
- object. If the user wishes to snooze an alert, the application
- MUST create an alert to trigger after snoozing. This new snooze
- alert MUST set a parent relation to the identifier of the original
- alert.
-
- action: "String" (optional, default: "display")
- This describes how to alert the user.
-
- The value MUST be at most one of the following values, a value
- registered in the IANA "JSCalendar Enum Values" registry, or a
- vendor-specific value (see Section 3.3):
-
- "display": The alert should be displayed as appropriate for the
- current device and user context.
-
- "email": The alert should trigger an email sent out to the user,
- notifying them of the alert. This action is typically only
- appropriate for server implementations.
-
-4.6. Multilingual Properties
-
-4.6.1. localizations
-
- Type: "String[PatchObject]" (optional)
-
- A map where each key is a language tag [RFC5646], and the
- corresponding value is a set of patches to apply to the calendar
- object in order to localize it into that locale.
-
- See the description of PatchObject (Section 1.4.9) for the structure
- of the PatchObject. The patches are applied to the top-level
- calendar object. In addition, the "locale" property of the patched
- object is set to the language tag. All pointers for patches MUST end
- with one of the following suffixes; any patch that does not follow
- this MUST be ignored unless otherwise specified in a future RFC:
-
- * title
-
- * description
-
- * name
-
- A patch MUST NOT have the prefix "recurrenceOverrides"; any
- localization of the override MUST be a patch to the "localizations"
- property inside the override instead. For example, a patch to
- "locations/abcd1234/title" is permissible, but a patch to "uid" or
- "recurrenceOverrides/2020-01-05T14:00:00/title" is not.
-
- Note that this specification does not define how to maintain validity
- of localized content. For example, a client application changing a
- JSCalendar object's "title" property might also need to update any
- localizations of this property. Client implementations SHOULD
- provide the means to manage localizations, but how to achieve this is
- specific to the application's workflow and requirements.
-
-4.7. Time Zone Properties
-
-4.7.1. timeZone
-
- Type: "TimeZoneId|null" (optional, default: null)
-
- This identifies the time zone the object is scheduled in or is null
- for floating time. This is either a name from the IANA Time Zone
- Database [TZDB] or the TimeZoneId of a custom time zone from the
- "timeZones" property (Section 4.7.2). If omitted, this MUST be
- presumed to be null (i.e., floating time).
-
-4.7.2. timeZones
-
- Type: "TimeZoneId[TimeZone]" (optional)
-
- This maps identifiers of custom time zones to their time zone
- definitions. The following restrictions apply for each key in the
- map:
-
- * To avoid conflict with names in the IANA Time Zone Database
- [TZDB], it MUST start with the "/" character.
-
- * It MUST be a valid "paramtext" value, as specified in Section 3.1
- of [RFC5545].
-
- * At least one other property in the same JSCalendar object MUST
- reference a time zone using this identifier (i.e., orphaned time
- zones are not allowed).
-
- An identifier need only be unique to this JSCalendar object. It MAY
- differ from the "tzId" property value of the TimeZone object it maps
- to.
-
- A JSCalendar object may be part of a hierarchy of other JSCalendar
- objects (say, an Event is an entry in a Group). In this case, the
- set of time zones is the sum of the time zone definitions of this
- object and its parent objects. If multiple time zones with the same
- identifier exist, then the definition closest to the calendar object
- in relation to its parents MUST be used. (In context of Event, a
- time zone definition in its "timeZones" property has precedence over
- a definition of the same id in the Group). Time zone definitions in
- any children of the calendar object MUST be ignored.
-
- A TimeZone object maps a VTIMEZONE component from iCalendar, and the
- semantics are as defined in [RFC5545]. A valid time zone MUST define
- at least one transition rule in the "standard" or "daylight"
- property. Its properties are:
-
- @type: "String" (mandatory)
- This specifies the type of this object. This MUST be "TimeZone".
-
- tzId: "String" (mandatory)
- This is the TZID property from iCalendar. Note that this implies
- that the value MUST be a valid "paramtext" value as specified in
- Section 3.1. of [RFC5545].
-
- updated: "UTCDateTime" (optional)
- This is the LAST-MODIFIED property from iCalendar.
-
- url: "String" (optional)
- This is the TZURL property from iCalendar.
-
- validUntil: "UTCDateTime" (optional)
- This is the TZUNTIL property from iCalendar, specified in
- [RFC7808].
-
- aliases: "String[Boolean]" (optional)
- This maps the TZID-ALIAS-OF properties from iCalendar, specified
- in [RFC7808], to a JSON set of aliases. The set is represented as
- an object, with the keys being the aliases. The value for each
- key in the map MUST be true.
-
- standard: "TimeZoneRule[]" (optional)
- This the STANDARD sub-components from iCalendar. The order MUST
- be preserved during conversion.
-
- daylight: "TimeZoneRule[]" (optional)
- This the DAYLIGHT sub-components from iCalendar. The order MUST
- be preserved during conversion.
-
- A TimeZoneRule object maps a STANDARD or DAYLIGHT sub-component from
- iCalendar, with the restriction that, at most, one recurrence rule is
- allowed per rule. It has the following properties:
-
- @type: "String" (mandatory)
- This specifies the type of this object. This MUST be
- "TimeZoneRule".
-
- start: "LocalDateTime" (mandatory)
- This is the DTSTART property from iCalendar.
-
- offsetFrom: "String" (mandatory)
- This is the TZOFFSETFROM property from iCalendar.
-
- offsetTo: "String" (mandatory)
- This is the TZOFFSETTO property from iCalendar.
-
- recurrenceRules: "RecurrenceRule[]" (optional)
- This is the RRULE property mapped, as specified in Section 4.3.3.
- During recurrence rule evaluation, the "until" property value MUST
- be interpreted as a local time in the UTC time zone.
-
- recurrenceOverrides: "LocalDateTime[PatchObject]" (optional)
- This maps the RDATE properties from iCalendar. The set is
- represented as an object, with the keys being the recurrence
- dates. The patch object MUST be the empty JSON object ({}).
-
- names: "String[Boolean]" optional)
- This maps the TZNAME properties from iCalendar to a JSON set. The
- set is represented as an object, with the keys being the names,
- excluding any "tznparam" component from iCalendar. The value for
- each key in the map MUST be true.
-
- comments: "String[]" (optional)
- This maps the COMMENT properties from iCalendar. The order MUST
- be preserved during conversion.
-
-5. Type-Specific JSCalendar Properties
-
-5.1. Event Properties
-
- In addition to the common JSCalendar object properties (Section 4),
- an Event has the following properties:
-
-5.1.1. start
-
- Type: "LocalDateTime" (mandatory)
-
- This is the date/time the event starts in the event's time zone (as
- specified in the "timeZone" property, see Section 4.7.1).
-
-5.1.2. duration
-
- Type: "Duration" (optional, default: "PT0S")
-
- This is the zero or positive duration of the event in the event's
- start time zone. The end time of an event can be found by adding the
- duration to the event's start time.
-
- An Event MAY involve start and end locations that are in different
- time zones (e.g., a transcontinental flight). This can be expressed
- using the "relativeTo" and "timeZone" properties of the Event's
- Location objects (see Section 4.2.5).
-
-5.1.3. status
-
- Type: "String" (optional, default: "confirmed")
-
- This is the scheduling status (Section 4.4) of an Event. If set, it
- MUST be one of the following values, another value registered in the
- IANA "JSCalendar Enum Values" registry, or a vendor-specific value
- (see Section 3.3):
-
- "confirmed": indicates the event is definitely happening
-
- "cancelled": indicates the event has been cancelled
-
- "tentative": indicates the event may happen
-
-5.2. Task Properties
-
- In addition to the common JSCalendar object properties (Section 4), a
- Task has the following properties:
-
-5.2.1. due
-
- Type: "LocalDateTime" (optional)
-
- This is the date/time the task is due in the task's time zone.
-
-5.2.2. start
-
- Type: "LocalDateTime" (optional)
-
- This the date/time the task should start in the task's time zone.
-
-5.2.3. estimatedDuration
-
- Type: "Duration" (optional)
-
- This specifies the estimated positive duration of time the task takes
- to complete.
-
-5.2.4. percentComplete
-
- Type: "UnsignedInt" (optional)
-
- This represents the percent completion of the task overall. The
- property value MUST be a positive integer between 0 and 100.
-
-5.2.5. progress
-
- Type: "String" (optional)
-
- This defines the progress of this task. If omitted, the default
- progress (Section 4.4) of a Task is defined as follows (in order of
- evaluation):
-
- "completed": if the "progress" property value of all participants is
- "completed"
-
- "failed": if at least one "progress" property value of a participant
- is "failed"
-
- "in-process": if at least one "progress" property value of a
- participant is "in-process"
-
- "needs-action": if none of the other criteria match
-
- If set, it MUST be one of the following values, another value
- registered in the IANA "JSCalendar Enum Values" registry, or a
- vendor-specific value (see Section 3.3):
-
- "needs-action": indicates the task needs action
-
- "in-process": indicates the task is in process
-
- "completed": indicates the task is completed
-
- "failed": indicates the task failed
-
- "cancelled": indicates the task was cancelled
-
-5.2.6. progressUpdated
-
- Type: "UTCDateTime" (optional)
-
- This specifies the date/time the "progress" property of either the
- task overall (Section 5.2.5) or a specific participant
- (Section 4.4.6) was last updated.
-
- If the task is recurring and has future instances, a client may want
- to keep track of the last progress update timestamp of a specific
- task recurrence but leave other instances unchanged. One way to
- achieve this is by overriding the "progressUpdated" property in the
- task "recurrenceOverrides" property. However, this could produce a
- long list of timestamps for regularly recurring tasks. An
- alternative approach is to split the Task into a current, single
- instance of Task with this instance progress update time and a future
- recurring instance. See also Section 4.1.3 on splitting.
-
-5.3. Group Properties
-
- Group supports the following common JSCalendar properties
- (Section 4):
-
- * @type
-
- * uid
-
- * prodId
-
- * created
-
- * updated
-
- * title
-
- * description
-
- * descriptionContentType
-
- * links
-
- * locale
-
- * keywords
-
- * categories
-
- * color
-
- * timeZones
-
- In addition, the following Group-specific properties are supported:
-
-5.3.1. entries
-
- Type: "(Task|Event)[]" (mandatory)
-
- This is a collection of group members. Implementations MUST ignore
- entries of unknown type.
-
-5.3.2. source
-
- Type: "String" (optional)
-
- This is the source from which updated versions of this group may be
- retrieved. The value MUST be a URI.
-
-6. Examples
-
- The following examples illustrate several aspects of the JSCalendar
- data model and format. The examples may omit mandatory or additional
- properties, which is indicated by a placeholder property with key
- "...". While most of the examples use calendar event objects, they
- are also illustrative for tasks.
-
-6.1. Simple Event
-
- This example illustrates a simple one-time event. It specifies a
- one-time event that begins on January 15, 2020 at 1 pm New York local
- time and ends after 1 hour.
-
- {
- "@type": "Event",
- "uid": "a8df6573-0474-496d-8496-033ad45d7fea",
- "updated": "2020-01-02T18:23:04Z",
- "title": "Some event",
- "start": "2020-01-15T13:00:00",
- "timeZone": "America/New_York",
- "duration": "PT1H"
- }
-
-6.2. Simple Task
-
- This example illustrates a simple task for a plain to-do item.
-
- {
- "@type": "Task",
- "uid": "2a358cee-6489-4f14-a57f-c104db4dc2f2",
- "updated": "2020-01-09T14:32:01Z",
- "title": "Do something"
- }
-
-6.3. Simple Group
-
- This example illustrates a simple calendar object group that contains
- an event and a task.
-
- {
- "@type": "Group",
- "uid": "bf0ac22b-4989-4caf-9ebd-54301b4ee51a",
- "updated": "2020-01-15T18:00:00Z",
- "name": "A simple group",
- "entries": [{
- "@type": "Event",
- "uid": "a8df6573-0474-496d-8496-033ad45d7fea",
- "updated": "2020-01-02T18:23:04Z",
- "title": "Some event",
- "start": "2020-01-15T13:00:00",
- "timeZone": "America/New_York",
- "duration": "PT1H"
- },
- {
- "@type": "Task",
- "uid": "2a358cee-6489-4f14-a57f-c104db4dc2f2",
- "updated": "2020-01-09T14:32:01Z",
- "title": "Do something"
- }]
- }
-
-6.4. All-Day Event
-
- This example illustrates an event for an international holiday. It
- specifies an all-day event on April 1 that occurs every year since
- the year 1900.
-
- {
- "...": "",
- "title": "April Fool's Day",
- "showWithoutTime": true,
- "start": "1900-04-01T00:00:00",
- "duration": "P1D",
- "recurrenceRules": [{
- "@type": "RecurrenceRule",
- "frequency": "yearly"
- }]
- }
-
-6.5. Task with a Due Date
-
- This example illustrates a task with a due date. It is a reminder to
- buy groceries before 6 pm Vienna local time on January 19, 2020. The
- calendar user expects to need 1 hour for shopping.
-
- {
- "...": "",
- "title": "Buy groceries",
- "due": "2020-01-19T18:00:00",
- "timeZone": "Europe/Vienna",
- "estimatedDuration": "PT1H"
- }
-
-6.6. Event with End Time Zone
-
- This example illustrates the use of end time zones by use of an
- international flight. The flight starts on April 1, 2020 at 9 am in
- Berlin local time. The duration of the flight is scheduled at 10
- hours 30 minutes. The time at the flight's destination is in the
- same time zone as Tokyo. Calendar clients could use the end time
- zone to display the arrival time in Tokyo local time and highlight
- the time zone difference of the flight. The location names can serve
- as input for navigation systems.
-
- {
- "...": "",
- "title": "Flight XY51 to Tokyo",
- "start": "2020-04-01T09:00:00",
- "timeZone": "Europe/Berlin",
- "duration": "PT10H30M",
- "locations": {
- "1": {
- "@type": "Location",
- "rel": "start",
- "name": "Frankfurt Airport (FRA)"
- },
- "2": {
- "@type": "Location",
- "rel": "end",
- "name": "Narita International Airport (NRT)",
- "timeZone": "Asia/Tokyo"
- }
- }
- }
-
-6.7. Floating-Time Event (with Recurrence)
-
- This example illustrates the use of floating time. Since January 1,
- 2020, a calendar user blocks 30 minutes every day to practice yoga at
- 7 am local time in whatever time zone the user is located on that
- date.
-
- {
- "...": "",
- "title": "Yoga",
- "start": "2020-01-01T07:00:00",
- "duration": "PT30M",
- "recurrenceRules": [{
- "@type": "RecurrenceRule",
- "frequency": "daily"
- }]
- }
-
-6.8. Event with Multiple Locations and Localization
-
- This example illustrates an event that happens at both a physical and
- a virtual location. Fans can see a live concert on premises or
- online. The event title and descriptions are localized.
-
- {
- "...": "",
- "title": "Live from Music Bowl: The Band",
- "description": "Go see the biggest music event ever!",
- "locale": "en",
- "start": "2020-07-04T17:00:00",
- "timeZone": "America/New_York",
- "duration": "PT3H",
- "locations": {
- "c0503d30-8c50-4372-87b5-7657e8e0fedd": {
- "@type": "Location",
- "name": "The Music Bowl",
- "description": "Music Bowl, Central Park, New York",
- "coordinates": "geo:40.7829,-73.9654"
- }
- },
- "virtualLocations": {
- "vloc1": {
- "@type": "VirtualLocation",
- "name": "Free live Stream from Music Bowl",
- "uri": "https://stream.example.com/the_band_2020"
- }
- },
- "localizations": {
- "de": {
- "title": "Live von der Music Bowl: The Band!",
- "description": "Schau dir das größte Musikereignis an!",
- "virtualLocations/vloc1/name":
- "Gratis Live-Stream aus der Music Bowl"
- }
- }
- }
-
-6.9. Recurring Event with Overrides
-
- This example illustrates the use of recurrence overrides. A math
- course at a university is held for the first time on January 8, 2020
- at 9 am London time and occurs every week until June 24, 2020. Each
- lecture lasts for one hour and 30 minutes and is located at the
- Mathematics department. This event has exceptional occurrences: at
- the last occurrence of the course is an exam, which lasts for 2 hours
- and starts at 10 am. Also, the location of the exam differs from the
- usual location. On April 1, no course is held. On January 7 at 2
- pm, there is an optional introduction course, which occurs before the
- first regular lecture.
-
- {
- "...": "",
- "title": "Calculus I",
- "start": "2020-01-08T09:00:00",
- "timeZone": "Europe/London",
- "duration": "PT1H30M",
- "locations": {
- "mlab": {
- "@type": "Location",
- "title": "Math lab room 1",
- "description": "Math Lab I, Department of Mathematics"
- }
- },
- "recurrenceRules": [{
- "@type": "RecurrenceRule",
- "frequency": "weekly",
- "until": "2020-06-24T09:00:00"
- }],
- "recurrenceOverrides": {
- "2020-01-07T14:00:00": {
- "title": "Introduction to Calculus I (optional)"
- },
- "2020-04-01T09:00:00": {
- "excluded": true
- },
- "2020-06-25T09:00:00": {
- "title": "Calculus I Exam",
- "start": "2020-06-25T10:00:00",
- "duration": "PT2H",
- "locations": {
- "auditorium": {
- "@type": "Location",
- "title": "Big Auditorium",
- "description": "Big Auditorium, Other Road"
- }
- }
- }
- }
- }
-
-6.10. Recurring Event with Participants
-
- This example illustrates scheduled events. A team meeting occurs
- every week since January 8, 2020 at 9 am Johannesburg time. The
- event owner also chairs the event. Participants meet in a virtual
- meeting room. An attendee has accepted the invitation, but, on March
- 4, 2020, he is unavailable and declined participation for this
- occurrence.
-
- {
- "...": "",
- "title": "FooBar team meeting",
- "start": "2020-01-08T09:00:00",
- "timeZone": "Africa/Johannesburg",
- "duration": "PT1H",
- "virtualLocations": {
- "0": {
- "@type": "VirtualLocation",
- "name": "ChatMe meeting room",
- "uri": "https://chatme.example.com?id=1234567&pw=a8a24627b63d"
- }
- },
- "recurrenceRules": [{
- "@type": "RecurrenceRule",
- "frequency": "weekly"
- }],
- "replyTo": {
- "imip": "mailto:f245f875-7f63-4a5e-a2c8@schedule.example.com"
- },
- "participants": {
- "dG9tQGZvb2Jhci5xlLmNvbQ": {
- "@type": "Participant",
- "name": "Tom Tool",
- "email": "tom@foobar.example.com",
- "sendTo": {
- "imip": "mailto:tom@calendar.example.com"
- },
- "participationStatus": "accepted",
- "roles": {
- "attendee": true
- }
- },
- "em9lQGZvb2GFtcGxlLmNvbQ": {
- "@type": "Participant",
- "name": "Zoe Zelda",
- "email": "zoe@foobar.example.com",
- "sendTo": {
- "imip": "mailto:zoe@foobar.example.com"
- },
- "participationStatus": "accepted",
- "roles": {
- "owner": true,
- "attendee": true,
- "chair": true
- }
- }
- },
- "recurrenceOverrides": {
- "2020-03-04T09:00:00": {
- "participants/dG9tQGZvb2Jhci5xlLmNvbQ/participationStatus":
- "declined"
- }
- }
- }
-
-7. Security Considerations
-
- Calendaring and scheduling information is very privacy sensitive. It
- can reveal the social network of a user, location information of this
- user and those in their social network, identity and credentials
- information, and patterns of behavior of the user in both the
- physical and cyber realm. Additionally, calendar events and tasks
- can influence the physical location of a user or their cyber behavior
- within a known time window. Its transmission and storage must be
- done carefully to protect it from possible threats, such as
- eavesdropping, replay, message insertion, deletion, modification, and
- on-path attacks.
-
- The data being stored and transmitted may be used in systems with
- real-world consequences. For example, a home automation system may
- turn an alarm on and off or a coworking space may charge money to the
- organizer of an event that books one of their meeting rooms. Such
- systems must be careful to authenticate all data they receive to
- prevent them from being subverted and ensure the change comes from an
- authorized entity.
-
- This document only defines the data format; such considerations are
- primarily the concern of the API or method of storage and
- transmission of such files.
-
-7.1. Expanding Recurrences
-
- A recurrence rule may produce infinite occurrences of an event.
- Implementations MUST handle expansions carefully to prevent
- accidental or deliberate resource exhaustion.
-
- Conversely, a recurrence rule may be specified that does not expand
- to anything. It is not always possible to tell this through static
- analysis of the rule, so implementations MUST be careful to avoid
- getting stuck in infinite loops or otherwise exhausting resources
- while searching for the next occurrence.
-
- Events recur in the event's time zone. If the user is in a different
- time zone, daylight saving transitions may cause an event that
- normally occurs at, for example, 9 am to suddenly shift an hour
- earlier. This may be used in an attempt to cause a participant to
- miss an important meeting. User agents must be careful to translate
- date-times correctly between time zones and may wish to call out
- unexpected changes in the time of a recurring event.
-
-7.2. JSON Parsing
-
- The security considerations of [RFC8259] apply to the use of JSON as
- the data interchange format.
-
- As for any serialization format, parsers need to thoroughly check the
- syntax of the supplied data. JSON uses opening and closing tags for
- several types and structures, and it is possible that the end of the
- supplied data will be reached when scanning for a matching closing
- tag; this is an error condition, and implementations need to stop
- scanning at the end of the supplied data.
-
- JSON also uses a string encoding with some escape sequences to encode
- special characters within a string. Care is needed when processing
- these escape sequences to ensure that they are fully formed before
- the special processing is triggered, with special care taken when the
- escape sequences appear adjacent to other (non-escaped) special
- characters or adjacent to the end of data (as in the previous
- paragraph).
-
- If parsing JSON into a non-textual structured data format,
- implementations may need to allocate storage to hold JSON string
- elements. Since JSON does not use explicit string lengths, the risk
- of denial of service due to resource exhaustion is small, but
- implementations may still wish to place limits on the size of
- allocations they are willing to make in any given context, to avoid
- untrusted data causing excessive memory allocation.
-
-7.3. URI Values
-
- Several JSCalendar properties contain URIs as values, and processing
- these properties requires extra care. Section 7 of [RFC3986]
- discusses security risks related to URIs.
-
- Fetching remote resources carries inherent risks. Connections must
- only be allowed on well-known ports, using allowed protocols
- (generally, just HTTP/HTTPS on their default ports). The URL must be
- resolved externally and not allowed to access internal resources.
- Connecting to an external source reveals IP (and therefore often
- location) information.
-
- A maliciously constructed JSCalendar object may contain a very large
- number of URIs. In the case of published calendars with a large
- number of subscribers, such objects could be widely distributed.
- Implementations should be careful to limit the automatic fetching of
- linked resources to reduce the risk of this being an amplification
- vector for a denial-of-service attack.
-
-7.4. Spam
-
- Calendar systems may receive JSCalendar files from untrusted sources,
- in particular, as attachments to emails. This can be a vector for an
- attacker to inject spam into a user's calendar. This may confuse,
- annoy, and mislead users or overwhelm their calendar with bogus
- events, preventing them from seeing legitimate ones.
-
- Heuristic, statistical, or machine-learning-based filters can be
- effective in filtering out spam. Authentication mechanisms, such as
- DomainKeys Identified Mail (DKIM) [RFC6376], can help establish the
- source of messages and associate the data with existing relationships
- (such as an address book contact). However, misclassifications are
- always possible and providing a mechanism for users to quickly
- correct this is advised.
-
- Confusable unicode characters may be used to trick a user into
- trusting a JSCalendar file that appears to come from a known contact
- but is actually from a similar-looking source controlled by an
- attacker.
-
-7.5. Duplication
-
- It is important for calendar systems to maintain the UID of an event
- when updating it to avoid an unexpected duplication of events.
- Consumers of the data may not remove the previous version of the
- event if it has a different UID. This can lead to a confusing
- situation for the user, with many variations of the event and no
- indication of which one is correct. Care must be taken by consumers
- of the data to remove old events where possible to avoid an
- accidental denial-of-service attack due to the volume of data.
-
-7.6. Time Zones
-
- Events recur in a particular time zone. When this differs from the
- user's current time zone, it may unexpectedly cause an occurrence to
- shift in time for that user due to a daylight savings change in the
- event's time zone. A maliciously crafted event could attempt to
- confuse users with such an event to ensure a meeting is missed.
-
-8. IANA Considerations
-
-8.1. Media Type Registration
-
- This document defines a media type for use with JSCalendar data
- formatted in JSON.
-
- Type name: application
-
- Subtype name: jscalendar+json
-
- Required parameters: type
-
- The "type" parameter conveys the type of the JSCalendar data in
- the body part. The allowed parameter values correspond to the
- "@type" property of the JSON-formatted JSCalendar object in the
- body:
-
- "event": The "@type" property value MUST be "Event".
-
- "task": The "@type" property value MUST be "Task".
-
- "group": The "@type" property value MUST be "Group".
-
- No other parameter values are allowed. The parameter MUST NOT
- occur more than once.
-
- Optional parameters: none
-
- Encoding considerations: This is the same as the encoding
- considerations of application/json, as specified in Section 11 of
- [RFC8259].
-
- Security considerations: See Section 7 of this document.
-
- Interoperability considerations: While JSCalendar is designed to
- avoid ambiguities as much as possible, when converting objects
- from other calendar formats to/from JSCalendar, it is possible
- that differing representations for the same logical data or
- ambiguities in interpretation might arise. The semantic
- equivalence of two JSCalendar objects may be determined
- differently by different applications, for example, where URL
- values differ in case between the two objects.
-
- Published specification: RFC 8984
-
- Applications that use this media type: Applications that currently
- make use of the text/calendar and application/calendar+json media
- types can use this as an alternative. Similarly, applications
- that use the application/json media type to transfer calendaring
- data can use this to further specify the content.
-
- Fragment identifier considerations: A JSON Pointer fragment
- identifier may be used, as defined in [RFC6901], Section 6.
-
- Additional information: Magic number(s): N/A
-
- File extensions(s): N/A
-
- Macintosh file type code(s): N/A
-
- Person & email address to contact for further information:
- calsify@ietf.org
-
- Intended usage: COMMON
-
- Restrictions on usage: N/A
-
- Author: See the "Author's Address" section of this document.
-
- Change controller: IETF
-
-8.2. Creation of the "JSCalendar Properties" Registry
-
- IANA has created the "JSCalendar Properties" registry to allow
- interoperability of extensions to JSCalendar objects.
-
- This registry follows the Expert Review process ([RFC8126],
- Section 4.5). If the "Intended Usage" field is "common", sufficient
- documentation is required to enable interoperability. Preliminary
- community review for this registry is optional but strongly
- encouraged.
-
- A registration can have an intended usage of "common", "reserved", or
- "obsolete". IANA will list registrations with a common usage
- designation prominently and separately from those with other intended
- usage values.
-
- A "reserved" registration reserves a property name without assigning
- semantics to avoid name collisions with future extensions or protocol
- use.
-
- An "obsolete" registration denotes a property that is no longer
- expected to be added by up-to-date systems. A new property has
- probably been defined covering the obsolete property's semantics.
-
- The JSCalendar property registration procedure is not a formal
- standards process but rather an administrative procedure intended to
- allow community comment and check it is coherent without excessive
- time delay. It is designed to encourage vendors to document and
- register new properties they add for use cases not covered by the
- original specification, leading to increased interoperability.
-
-8.2.1. Preliminary Community Review
-
- Notice of a potential new registration SHOULD be sent to the Calext
- mailing list for review. This mailing list is
- appropriate to solicit community feedback on a proposed new property.
-
- Property registrations must be marked with their intended use:
- "common", "reserved", or "obsolete".
-
- The intent of the public posting to this list is to solicit comments
- and feedback on the choice of the property name, the unambiguity of
- the specification document, and a review of any interoperability or
- security considerations. The submitter may submit a revised
- registration proposal or abandon the registration completely at any
- time.
-
-8.2.2. Submit Request to IANA
-
- Registration requests can be sent to .
-
-8.2.3. Designated Expert Review
-
- The primary concern of the designated expert (DE) is preventing name
- collisions and encouraging the submitter to document security and
- privacy considerations. For a common-use registration, the DE is
- expected to confirm that suitable documentation, as described in
- Section 4.6 of [RFC8126], is available to ensure interoperability.
- That documentation will usually be in an RFC, but simple definitions
- are likely to use a web/wiki page, and if a sentence or two is deemed
- sufficient, it could be described in the registry itself. The DE
- should also verify that the property name does not conflict with work
- that is active or already published within the IETF. A published
- specification is not required for reserved or obsolete registrations.
-
- The DE will either approve or deny the registration request and
- publish a notice of the decision to the Calext WG mailing list or its
- successor, as well as inform IANA. A denial notice must be justified
- by an explanation, and, in the cases where it is possible, concrete
- suggestions on how the request can be modified so as to become
- acceptable should be provided.
-
-8.2.4. Change Procedures
-
- Once a JSCalendar property has been published by IANA, the change
- controller may request a change to its definition. The same
- procedure that would be appropriate for the original registration
- request is used to process a change request.
-
- JSCalendar property registrations may not be deleted; properties that
- are no longer believed appropriate for use can be declared obsolete
- by a change to their "intended usage" field; such properties will be
- clearly marked in the IANA registry.
-
- Significant changes to a JSCalendar property's definition should be
- requested only when there are serious omissions or errors in the
- published specification, as such changes may cause interoperability
- issues. When review is required, a change request may be denied if
- it renders entities that were valid under the previous definition
- invalid under the new definition.
-
- The owner of a JSCalendar property may pass responsibility to another
- person or agency by informing IANA; this can be done without
- discussion or review.
-
-8.2.5. "JSCalendar Properties" Registry Template
-
- Property Name: This is the name of the property. The property name
- MUST NOT already be registered for any of the object types listed
- in the "Property Context" field of this registration. Other
- object types MAY already have registered a different property with
- the same name; however, the same name SHOULD only be used when the
- semantics are analogous.
-
- Property Type: This is the type of this property, using type
- signatures, as specified in Section 1.3. The property type MUST
- be registered in the "JSCalendar Types" registry.
-
- Property Context: This is a comma-separated list of JSCalendar
- object types this property is allowed on.
-
- Reference or Description: This is a brief description or RFC number
- and section reference where the property is specified (omitted for
- "reserved" property names).
-
- Intended Usage: This may be "common", "reserved", or "obsolete".
-
- Change Controller: This is who may request a change to this entry's
- definition ("IETF" for RFCs from the IETF stream).
-
-8.2.6. Initial Contents for the "JSCalendar Properties" Registry
-
- The following table lists the initial entries of the "JSCalendar
- Properties" registry. All properties are for common use. All RFC
- section references are for this document. The change controller for
- all these properties is "IETF".
-
- +====================+=================+================+===========+
- |Property Name |Property Type |Property Context|Reference |
- | | | |or |
- | | | |Description|
- +====================+=================+================+===========+
- |@type |String |Event, Task, |Section |
- | | |Group, |4.1.1, |
- | | |AbsoluteTrigger,|Section |
- | | |Alert, Link, |4.5.2, |
- | | |Location, NDay, |Section |
- | | |OffsetTrigger, |1.4.11, |
- | | |Participant, |Section |
- | | |RecurrenceRule, |4.2.5, |
- | | |Relation, |Section |
- | | |TimeZone, |4.4.6, |
- | | |TimeZoneRule, |Section |
- | | |VirtualLocation |4.3.3, |
- | | | |Section |
- | | | |1.4.10, |
- | | | |Section |
- | | | |4.7.2, |
- | | | |Section |
- | | | |4.2.6 |
- +--------------------+-----------------+----------------+-----------+
- |acknowledged |UTCDateTime |Alert |Section |
- | | | |4.5.2 |
- +--------------------+-----------------+----------------+-----------+
- |action |String |Alert |Section |
- | | | |4.5.2 |
- +--------------------+-----------------+----------------+-----------+
- |alerts |Id[Alert] |Event, Task |Section |
- | | | |4.5.2 |
- +--------------------+-----------------+----------------+-----------+
- |aliases |String[Boolean] |TimeZone |Section |
- | | | |4.7.2 |
- +--------------------+-----------------+----------------+-----------+
- |byDay |NDay[] |RecurrenceRule |Section |
- | | | |4.3.3 |
- +--------------------+-----------------+----------------+-----------+
- |byHour |UnsignedInt[] |RecurrenceRule |Section |
- | | | |4.3.3 |
- +--------------------+-----------------+----------------+-----------+
- |byMinute |UnsignedInt[] |RecurrenceRule |Section |
- | | | |4.3.3 |
- +--------------------+-----------------+----------------+-----------+
- |byMonth |String[] |RecurrenceRule |Section |
- | | | |4.3.3 |
- +--------------------+-----------------+----------------+-----------+
- |byMonthDay |Int[] |RecurrenceRule |Section |
- | | | |4.3.3 |
- +--------------------+-----------------+----------------+-----------+
- |bySecond |UnsignedInt[] |RecurrenceRule |Section |
- | | | |4.3.3 |
- +--------------------+-----------------+----------------+-----------+
- |bySetPosition |Int[] |RecurrenceRule |Section |
- | | | |4.3.3 |
- +--------------------+-----------------+----------------+-----------+
- |byWeekNo |Int[] |RecurrenceRule |Section |
- | | | |4.3.3 |
- +--------------------+-----------------+----------------+-----------+
- |byYearDay |Int[] |RecurrenceRule |Section |
- | | | |4.3.3 |
- +--------------------+-----------------+----------------+-----------+
- |categories |String[Boolean] |Event, Task, |Section |
- | | |Group |4.2.10 |
- +--------------------+-----------------+----------------+-----------+
- |cid |String |Link |Section |
- | | | |1.4.11 |
- +--------------------+-----------------+----------------+-----------+
- |color |String |Event, Task, |Section |
- | | |Group |4.2.11 |
- +--------------------+-----------------+----------------+-----------+
- |comments |String[] |TimeZoneRule |Section |
- | | | |4.7.2 |
- +--------------------+-----------------+----------------+-----------+
- |contentType |String |Link |Section |
- | | | |1.4.11 |
- +--------------------+-----------------+----------------+-----------+
- |coordinates |String |Location |Section |
- | | | |4.2.5 |
- +--------------------+-----------------+----------------+-----------+
- |count |UnsignedInt |RecurrenceRule |Section |
- | | | |4.3.3 |
- +--------------------+-----------------+----------------+-----------+
- |created |UTCDateTime |Event, Task, |Section |
- | | |Group |4.1.5 |
- +--------------------+-----------------+----------------+-----------+
- |day |String |NDay |Section |
- | | | |4.3.3 |
- +--------------------+-----------------+----------------+-----------+
- |daylight |TimeZoneRule[] |TimeZone |Section |
- | | | |4.7.2 |
- +--------------------+-----------------+----------------+-----------+
- |delegatedFrom |Id[Boolean] |Participant |Section |
- | | | |4.4.6 |
- +--------------------+-----------------+----------------+-----------+
- |delegatedTo |Id[Boolean] |Participant |Section |
- | | | |4.4.6 |
- +--------------------+-----------------+----------------+-----------+
- |description |String |Event, Task, |Section |
- | | |Location, |4.2.2, |
- | | |Participant, |Section |
- | | |VirtualLocation |4.2.5, |
- | | | |Section |
- | | | |4.4.6, |
- | | | |Section |
- | | | |4.2.6 |
- +--------------------+-----------------+----------------+-----------+
- |description |String |Event, Task |Section |
- |ContentType | | |4.2.3 |
- +--------------------+-----------------+----------------+-----------+
- |display |String |Link |Section |
- | | | |1.4.11 |
- +--------------------+-----------------+----------------+-----------+
- |due |LocalDateTime |Task |Section |
- | | | |5.2.1 |
- +--------------------+-----------------+----------------+-----------+
- |duration |Duration |Event |Section |
- | | | |5.1.2 |
- +--------------------+-----------------+----------------+-----------+
- |email |String |Participant |Section |
- | | | |4.4.6 |
- +--------------------+-----------------+----------------+-----------+
- |entries |(Task|Event)[] |Group |Section |
- | | | |5.3.1 |
- +--------------------+-----------------+----------------+-----------+
- |estimatedDuration |Duration |Task |Section |
- | | | |5.2.3 |
- +--------------------+-----------------+----------------+-----------+
- |excluded |Boolean |Event, Task |Section |
- | | | |4.3.6 |
- +--------------------+-----------------+----------------+-----------+
- |excluded |RecurrenceRule[] |Event, Task |Section |
- |RecurrenceRules | | |4.3.4 |
- +--------------------+-----------------+----------------+-----------+
- |expectReply |Boolean |Participant |Section |
- | | | |4.4.6 |
- +--------------------+-----------------+----------------+-----------+
- |features |String[Boolean] |VirtualLocation |Section |
- | | | |4.2.6 |
- +--------------------+-----------------+----------------+-----------+
- |firstDayOfWeek |String |RecurrenceRule |Section |
- | | | |4.3.3 |
- +--------------------+-----------------+----------------+-----------+
- |freeBusyStatus |String |Event, Task |Section |
- | | | |4.4.2 |
- +--------------------+-----------------+----------------+-----------+
- |frequency |String |RecurrenceRule |Section |
- | | | |4.3.3 |
- +--------------------+-----------------+----------------+-----------+
- |href |String |Link |Section |
- | | | |1.4.11 |
- +--------------------+-----------------+----------------+-----------+
- |interval |UnsignedInt |RecurrenceRule |Section |
- | | | |4.3.3 |
- +--------------------+-----------------+----------------+-----------+
- |invitedBy |Id |Participant |Section |
- | | | |4.4.6 |
- +--------------------+-----------------+----------------+-----------+
- |keywords |String[Boolean] |Event, Task, |Section |
- | | |Group |4.2.9 |
- +--------------------+-----------------+----------------+-----------+
- |kind |String |Participant |Section |
- | | | |4.4.6 |
- +--------------------+-----------------+----------------+-----------+
- |language |String |Participant |Section |
- | | | |4.4.6 |
- +--------------------+-----------------+----------------+-----------+
- |links |Id[Link] |Group, Event, |Section |
- | | |Task, Location, |4.2.7, |
- | | |Participant |Section |
- | | | |4.2.5, |
- | | | |Section |
- | | | |4.4.6 |
- +--------------------+-----------------+----------------+-----------+
- |locale |String |Group, Event, |Section |
- | | |Task |4.2.8 |
- +--------------------+-----------------+----------------+-----------+
- |localizations |String |Event, Task |Section |
- | |[PatchObject] | |4.6.1 |
- +--------------------+-----------------+----------------+-----------+
- |locationId |Id |Participant |Section |
- | | | |4.4.6 |
- +--------------------+-----------------+----------------+-----------+
- |locations |Id[Location] |Event, Task |Section |
- | | | |4.2.5 |
- +--------------------+-----------------+----------------+-----------+
- |locationTypes |String[Boolean] |Location |Section |
- | | | |4.2.5 |
- +--------------------+-----------------+----------------+-----------+
- |memberOf |Id[Boolean] |Participant |Section |
- | | | |4.4.6 |
- +--------------------+-----------------+----------------+-----------+
- |method |String |Event, Task |Section |
- | | | |4.1.8 |
- +--------------------+-----------------+----------------+-----------+
- |name |String |Location, |Section |
- | | |VirtualLocation,|4.2.5, |
- | | |Participant |Section |
- | | | |4.2.6, |
- | | | |Section |
- | | | |4.4.6 |
- +--------------------+-----------------+----------------+-----------+
- |names |String[Boolean] |TimeZoneRule |Section |
- | | | |4.7.2 |
- +--------------------+-----------------+----------------+-----------+
- |nthOfPeriod |Int |NDay |Section |
- | | | |4.3.3 |
- +--------------------+-----------------+----------------+-----------+
- |offset |SignedDuration |OffsetTrigger |Section |
- | | | |4.5.2 |
- +--------------------+-----------------+----------------+-----------+
- |offsetFrom |UTCDateTime |TimeZoneRule |Section |
- | | | |4.7.2 |
- +--------------------+-----------------+----------------+-----------+
- |offsetTo |UTCDateTime |TimeZoneRule |Section |
- | | | |4.7.2 |
- +--------------------+-----------------+----------------+-----------+
- |participants |Id[Participant] |Event, Task |Section |
- | | | |4.4.6 |
- +--------------------+-----------------+----------------+-----------+
- |participationComment|String |Participant |Section |
- | | | |4.4.6 |
- +--------------------+-----------------+----------------+-----------+
- |participationStatus |String |Participant |Section |
- | | | |4.4.6 |
- +--------------------+-----------------+----------------+-----------+
- |percentComplete |UnsignedInt |Task, |Section |
- | | |Participant |5.2.4 |
- +--------------------+-----------------+----------------+-----------+
- |priority |Int |Event, Task |Section |
- | | | |4.4.1 |
- +--------------------+-----------------+----------------+-----------+
- |privacy |String |Event, Task |Section |
- | | | |4.4.3 |
- +--------------------+-----------------+----------------+-----------+
- |prodId |String |Event, Task, |Section |
- | | |Group |4.1.4 |
- +--------------------+-----------------+----------------+-----------+
- |progress |String |Task, |Section |
- | | |Participant |5.2.5 |
- +--------------------+-----------------+----------------+-----------+
- |progressUpdated |UTCDateTime |Task, |Section |
- | | |Participant |5.2.6 |
- +--------------------+-----------------+----------------+-----------+
- |recurrenceId |LocalDateTime |Event, Task |Section |
- | | | |4.3.1 |
- +--------------------+-----------------+----------------+-----------+
- |recurrenceIdTimeZone|TimeZoneId|null |Event, Task |Section |
- | | | |4.3.2 |
- +--------------------+-----------------+----------------+-----------+
- |recurrenceOverrides |LocalDateTime |Event, Task, |Section |
- | |[PatchObject] |TimeZoneRule |4.3.5, |
- | | | |Section |
- | | | |4.7.2 |
- +--------------------+-----------------+----------------+-----------+
- |recurrenceRules |RecurrenceRule[] |Event, Task, |Section |
- | | |TimeZoneRule |4.3.3, |
- | | | |Section |
- | | | |4.7.2 |
- +--------------------+-----------------+----------------+-----------+
- |rel |String |Link |Section |
- | | | |1.4.11 |
- +--------------------+-----------------+----------------+-----------+
- |relatedTo |String[Relation] |Event, Task, |Section |
- | | |Alert |4.1.3, |
- | | | |Section |
- | | | |4.5.2 |
- +--------------------+-----------------+----------------+-----------+
- |relation |String[Boolean] |Relation |Section |
- | | | |1.4.10 |
- +--------------------+-----------------+----------------+-----------+
- |relativeTo |String |OffsetTrigger, |Section |
- | | |Location |4.5.2, |
- | | | |Section |
- | | | |4.2.5 |
- +--------------------+-----------------+----------------+-----------+
- |replyTo |String[String] |Event, Task |Section |
- | | | |4.4.4 |
- +--------------------+-----------------+----------------+-----------+
- |requestStatus |String |Event, Task |Section |
- | | | |4.4.7 |
- +--------------------+-----------------+----------------+-----------+
- |roles |String[Boolean] |Participant |Section |
- | | | |4.4.6 |
- +--------------------+-----------------+----------------+-----------+
- |rscale |String |RecurrenceRule |Section |
- | | | |4.3.3 |
- +--------------------+-----------------+----------------+-----------+
- |sentBy |String |Event, Task, |Section |
- | | |Participant |4.4.5, |
- | | | |Section |
- | | | |4.4.6 |
- +--------------------+-----------------+----------------+-----------+
- |standard |TimeZoneRule[] |TimeZone |Section |
- | | | |4.7.2 |
- +--------------------+-----------------+----------------+-----------+
- |start |LocalDateTime |TimeZoneRule |Section |
- | | | |4.7.2 |
- +--------------------+-----------------+----------------+-----------+
- |scheduleAgent |String |Participant |Section |
- | | | |4.4.6 |
- +--------------------+-----------------+----------------+-----------+
- |scheduleForceSend |Boolean |Participant |Section |
- | | | |4.4.6 |
- +--------------------+-----------------+----------------+-----------+
- |scheduleSequence |UnsignedInt |Participant |Section |
- | | | |4.4.6 |
- +--------------------+-----------------+----------------+-----------+
- |scheduleStatus |String[] |Participant |Section |
- | | | |4.4.6 |
- +--------------------+-----------------+----------------+-----------+
- |scheduleUpdated |UTCDateTime |Participant |Section |
- | | | |4.4.6 |
- +--------------------+-----------------+----------------+-----------+
- |sendTo |String[String] |Participant |Section |
- | | | |4.4.6 |
- +--------------------+-----------------+----------------+-----------+
- |sequence |UnsignedInt |Event, Task |Section |
- | | | |4.1.7 |
- +--------------------+-----------------+----------------+-----------+
- |showWithoutTime |Boolean |Event, Task |Section |
- | | | |4.2.4 |
- +--------------------+-----------------+----------------+-----------+
- |size |UnsignedInt |Link |Section |
- | | | |1.4.11 |
- +--------------------+-----------------+----------------+-----------+
- |skip |String |RecurrenceRule |Section |
- | | | |4.3.3 |
- +--------------------+-----------------+----------------+-----------+
- |source |String |Group |Section |
- | | | |5.3.2 |
- +--------------------+-----------------+----------------+-----------+
- |start |LocalDateTime |Event, Task |Section |
- | | | |5.1.1, |
- | | | |Section |
- | | | |5.2.2 |
- +--------------------+-----------------+----------------+-----------+
- |status |String |Event |Section |
- | | | |5.1.3 |
- +--------------------+-----------------+----------------+-----------+
- |timeZone |TimeZoneId|null |Event, Task, |Section |
- | | |Location |4.7.1, |
- | | | |Section |
- | | | |4.2.5 |
- +--------------------+-----------------+----------------+-----------+
- |timeZones |TimeZoneId |Event, Task |Section |
- | |[TimeZone] | |4.7.2 |
- +--------------------+-----------------+----------------+-----------+
- |title |String |Event, Task, |Section |
- | | |Group, Link |4.2.1 |
- +--------------------+-----------------+----------------+-----------+
- |trigger |OffsetTrigger| |Alert |Section |
- | |AbsoluteTrigger| | |4.5.2 |
- | |UnknownTrigger | | |
- +--------------------+-----------------+----------------+-----------+
- |tzId |String |TimeZone |Section |
- | | | |4.7.2 |
- +--------------------+-----------------+----------------+-----------+
- |uid |String |Event, Task, |Section |
- | | |Group |4.1.2 |
- +--------------------+-----------------+----------------+-----------+
- |until |LocalDateTime |RecurrenceRule |Section |
- | | | |4.3.3 |
- +--------------------+-----------------+----------------+-----------+
- |updated |UTCDateTime |Event, Task, |Section |
- | | |Group |4.1.6 |
- +--------------------+-----------------+----------------+-----------+
- |uri |String |VirtualLocation |Section |
- | | | |4.2.6 |
- +--------------------+-----------------+----------------+-----------+
- |url |String |TimeZone |Section |
- | | | |4.7.2 |
- +--------------------+-----------------+----------------+-----------+
- |useDefaultAlerts |Boolean |Event, Task |Section |
- | | | |4.5.1 |
- +--------------------+-----------------+----------------+-----------+
- |validUntil |UTCDateTime |TimeZone |Section |
- | | | |4.7.2 |
- +--------------------+-----------------+----------------+-----------+
- |virtualLocations |Id |Event, Task |Section |
- | |[VirtualLocation]| |4.2.6 |
- +--------------------+-----------------+----------------+-----------+
- |when |UTCDateTime |AbsoluteTrigger |Section |
- | | | |4.5.2 |
- +--------------------+-----------------+----------------+-----------+
-
- Table 1: Initial Contents of the "JSCalendar Properties" Registry
-
-8.3. Creation of the "JSCalendar Types" Registry
-
- IANA has created the "JSCalendar Types" registry to avoid name
- collisions and provide a complete reference for all data types used
- for JSCalendar property values. The registration process is the same
- as for the "JSCalendar Properties" registry, as defined in
- Section 8.2.
-
-8.3.1. "JSCalendar Types" Registry Template
-
- Type Name: the name of the type
-
- Reference or Description: a brief description or RFC number and
- section reference where the Type is specified (may be omitted for
- "reserved" type names)
-
- Intended Use: common, reserved, or obsolete
-
- Change Controller: who may request a change to this entry's
- definition ("IETF" for RFCs from the IETF stream)
-
-8.3.2. Initial Contents for the "JSCalendar Types" Registry
-
- The following table lists the initial entries of the JSCalendar Types
- registry. All properties are for common use. All RFC section
- references are for this document. The change controller for all
- these properties is "IETF".
-
- +=================+==========================+
- | Type Name | Reference or Description |
- +=================+==========================+
- | Alert | Section 4.5.2 |
- +-----------------+--------------------------+
- | Boolean | Section 1.3 |
- +-----------------+--------------------------+
- | Duration | Section 1.4.6 |
- +-----------------+--------------------------+
- | Id | Section 1.4.1 |
- +-----------------+--------------------------+
- | Int | Section 1.4.2 |
- +-----------------+--------------------------+
- | LocalDateTime | Section 1.4.5 |
- +-----------------+--------------------------+
- | Link | Section 1.4.11 |
- +-----------------+--------------------------+
- | Location | Section 4.2.5 |
- +-----------------+--------------------------+
- | NDay | Section 4.3.3 |
- +-----------------+--------------------------+
- | Number | Section 1.3 |
- +-----------------+--------------------------+
- | Participant | Section 4.4.6 |
- +-----------------+--------------------------+
- | PatchObject | Section 1.4.9 |
- +-----------------+--------------------------+
- | RecurrenceRule | Section 4.3.3 |
- +-----------------+--------------------------+
- | Relation | Section 1.4.10 |
- +-----------------+--------------------------+
- | SignedDuration | Section 1.4.7 |
- +-----------------+--------------------------+
- | String | Section 1.3 |
- +-----------------+--------------------------+
- | TimeZone | Section 4.7.2 |
- +-----------------+--------------------------+
- | TimeZoneId | Section 1.4.8 |
- +-----------------+--------------------------+
- | TimeZoneRule | Section 4.7.2 |
- +-----------------+--------------------------+
- | UnsignedInt | Section 1.4.3 |
- +-----------------+--------------------------+
- | UTCDateTime | Section 1.4.4 |
- +-----------------+--------------------------+
- | VirtualLocation | Section 4.2.6 |
- +-----------------+--------------------------+
-
- Table 2: Initial Contents of the
- "JSCalendar Types" Registry
-
-8.4. Creation of the "JSCalendar Enum Values" Registry
-
- IANA has created the "JSCalendar Enum Values" registry to allow
- interoperable extension of semantics for properties with enumerable
- values. Each such property will have a subregistry of allowed
- values. The registration process for a new enum value or adding a
- new enumerable property is the same as for the "JSCalendar
- Properties" registry, as defined in Section 8.2.
-
-8.4.1. "JSCalendar Enum Values" Registry Property Template
-
- This template is for adding a subregistry for a new enumerable
- property to the "JSCalendar Enum" registry.
-
- Property Name: These are the name(s) of the property or properties
- where these values may be used. This MUST be registered in the
- "JSCalendar Properties" registry.
-
- Context: This is the list of allowed object types where the property
- or properties may appear, as registered in the "JSCalendar
- Properties" registry. This disambiguates where there may be two
- distinct properties with the same name in different contexts.
-
- Change Controller: ("IETF" for properties defined in RFCs from the
- IETF stream).
-
- Initial Contents: This is the initial list of defined values for
- this enum, using the template defined in Section 8.4.2. A
- subregistry will be created with these values for this property
- name/context tuple.
-
-8.4.2. "JSCalendar Enum Values" Registry Value Template
-
- This template is for adding a new enum value to a subregistry in the
- JSCalendar Enum registry.
-
- Enum Value: the verbatim value of the enum
-
- Reference or Description: a brief description or RFC number and
- section reference for the semantics of this value
-
-8.4.3. Initial Contents for the "JSCalendar Enum Values" Registry
-
- For each subregistry created in this section, all RFC section
- references are for this document.
-
- Property Name: action
- Context: Alert
- Change Controller: IETF
- Initial Contents:
- +============+==========================+
- | Enum Value | Reference or Description |
- +============+==========================+
- | display | Section 4.5.2 |
- +------------+--------------------------+
- | email | Section 4.5.2 |
- +------------+--------------------------+
-
- Table 3: JSCalendar Enum Values for
- action (Context: Alert)
-
- Property Name: display
- Context: Link
- Change Controller: IETF
- Initial Contents:
- +============+==========================+
- | Enum Value | Reference or Description |
- +============+==========================+
- | badge | Section 1.4.11 |
- +------------+--------------------------+
- | graphic | Section 1.4.11 |
- +------------+--------------------------+
- | fullsize | Section 1.4.11 |
- +------------+--------------------------+
- | thumbnail | Section 1.4.11 |
- +------------+--------------------------+
-
- Table 4: JSCalendar Enum Values for
- display (Context: Link)
-
- Property Name: features
- Context: VirtualLocation
- Change Controller: IETF
- Initial Contents:
- +============+==========================+
- | Enum Value | Reference or Description |
- +============+==========================+
- | audio | Section 4.2.6 |
- +------------+--------------------------+
- | chat | Section 4.2.6 |
- +------------+--------------------------+
- | feed | Section 4.2.6 |
- +------------+--------------------------+
- | moderator | Section 4.2.6 |
- +------------+--------------------------+
- | phone | Section 4.2.6 |
- +------------+--------------------------+
- | screen | Section 4.2.6 |
- +------------+--------------------------+
- | video | Section 4.2.6 |
- +------------+--------------------------+
-
- Table 5: JSCalendar Enum Values for
- features (Context: VirtualLocation)
-
- Property Name: freeBusyStatus
- Context: Event, Task
- Change Controller: IETF
- Initial Contents:
- +============+==========================+
- | Enum Value | Reference or Description |
- +============+==========================+
- | free | Section 4.4.2 |
- +------------+--------------------------+
- | busy | Section 4.4.2 |
- +------------+--------------------------+
-
- Table 6: JSCalendar Enum Values for
- freeBusyStatus (Context: Event, Task)
-
- Property Name: kind
- Context: Participant
- Change Controller: IETF
- Initial Contents:
- +============+==========================+
- | Enum Value | Reference or Description |
- +============+==========================+
- | individual | Section 4.4.6 |
- +------------+--------------------------+
- | group | Section 4.4.6 |
- +------------+--------------------------+
- | resource | Section 4.4.6 |
- +------------+--------------------------+
- | location | Section 4.4.6 |
- +------------+--------------------------+
-
- Table 7: JSCalendar Enum Values for
- kind (Context: Participant)
-
- Property Name: participationStatus
- Context: Participant
- Change Controller: IETF
- Initial Contents:
- +==============+==========================+
- | Enum Value | Reference or Description |
- +==============+==========================+
- | needs-action | Section 4.4.6 |
- +--------------+--------------------------+
- | accepted | Section 4.4.6 |
- +--------------+--------------------------+
- | declined | Section 4.4.6 |
- +--------------+--------------------------+
- | tentative | Section 4.4.6 |
- +--------------+--------------------------+
- | delegated | Section 4.4.6 |
- +--------------+--------------------------+
-
- Table 8: JSCalendar Enum Values for
- participationStatus (Context:
- Participant)
-
- Property Name: privacy
- Context: Event, Task
- Change Controller: IETF
- Initial Contents:
- +============+==========================+
- | Enum Value | Reference or Description |
- +============+==========================+
- | public | Section 4.4.3 |
- +------------+--------------------------+
- | private | Section 4.4.3 |
- +------------+--------------------------+
- | secret | Section 4.4.3 |
- +------------+--------------------------+
-
- Table 9: JSCalendar Enum Values for
- privacy (Context: Event, Task)
-
- Property Name: progress
- Context: Task, Participant
- Change Controller: IETF
- Initial Contents:
- +==============+==========================+
- | Enum Value | Reference or Description |
- +==============+==========================+
- | needs-action | Section 5.2.5 |
- +--------------+--------------------------+
- | in-process | Section 5.2.5 |
- +--------------+--------------------------+
- | completed | Section 5.2.5 |
- +--------------+--------------------------+
- | failed | Section 5.2.5 |
- +--------------+--------------------------+
- | cancelled | Section 5.2.5 |
- +--------------+--------------------------+
-
- Table 10: JSCalendar Enum Values for
- progress (Context: Task, Participant)
-
- Property Name: relation
- Context: Relation
- Change Controller: IETF
- Initial Contents:
- +============+==========================+
- | Enum Value | Reference or Description |
- +============+==========================+
- | first | Section 1.4.10 |
- +------------+--------------------------+
- | next | Section 1.4.10 |
- +------------+--------------------------+
- | child | Section 1.4.10 |
- +------------+--------------------------+
- | parent | Section 1.4.10 |
- +------------+--------------------------+
-
- Table 11: JSCalendar Enum Values for
- relation (Context: Relation)
-
- Property Name: relativeTo
- Context: OffsetTrigger, Location
- Change Controller: IETF
- Initial Contents:
- +============+==========================+
- | Enum Value | Reference or Description |
- +============+==========================+
- | start | Section 4.5.2 |
- +------------+--------------------------+
- | end | Section 4.5.2 |
- +------------+--------------------------+
-
- Table 12: JSCalendar Enum Values for
- relativeTo (Context: OffsetTrigger,
- Location)
-
- Property Name: roles
- Context: Participant
- Change Controller: IETF
- Initial Contents:
- +===============+==========================+
- | Enum Value | Reference or Description |
- +===============+==========================+
- | owner | Section 4.4.6 |
- +---------------+--------------------------+
- | attendee | Section 4.4.6 |
- +---------------+--------------------------+
- | optional | Section 4.4.6 |
- +---------------+--------------------------+
- | informational | Section 4.4.6 |
- +---------------+--------------------------+
- | chair | Section 4.4.6 |
- +---------------+--------------------------+
- | contact | Section 4.4.6 |
- +---------------+--------------------------+
-
- Table 13: JSCalendar Enum Values for
- roles (Context: Participant)
-
- Property Name: scheduleAgent
- Context: Participant
- Change Controller: IETF
- Initial Contents:
- +============+==========================+
- | Enum Value | Reference or Description |
- +============+==========================+
- | server | Section 4.4.6 |
- +------------+--------------------------+
- | client | Section 4.4.6 |
- +------------+--------------------------+
- | none | Section 4.4.6 |
- +------------+--------------------------+
-
- Table 14: JSCalendar Enum Values for
- scheduleAgent (Context: Participant)
-
- Property Name: status
- Context: Event
- Change Controller: IETF
- Initial Contents:
- +============+==========================+
- | Enum Value | Reference or Description |
- +============+==========================+
- | confirmed | Section 5.1.3 |
- +------------+--------------------------+
- | cancelled | Section 5.1.3 |
- +------------+--------------------------+
- | tentative | Section 5.1.3 |
- +------------+--------------------------+
-
- Table 15: JSCalendar Enum Values for
- status (Context: Event)
-
-9. References
-
-9.1. Normative References
-
- [CLDR] "Unicode Common Locale Data Repository",
- .
-
- [COLORS] Çelik, T., Lilley, C., and L. Baron, "CSS Color Module
- Level 3", W3C Recommendation, June 2018,
- .
-
- [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
- Requirement Levels", BCP 14, RFC 2119,
- DOI 10.17487/RFC2119, March 1997,
- .
-
- [RFC2392] Levinson, E., "Content-ID and Message-ID Uniform Resource
- Locators", RFC 2392, DOI 10.17487/RFC2392, August 1998,
- .
-
- [RFC2397] Masinter, L., "The "data" URL scheme", RFC 2397,
- DOI 10.17487/RFC2397, August 1998,
- .
-
- [RFC3339] Klyne, G. and C. Newman, "Date and Time on the Internet:
- Timestamps", RFC 3339, DOI 10.17487/RFC3339, July 2002,
- .
-
- [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform
- Resource Identifier (URI): Generic Syntax", STD 66,
- RFC 3986, DOI 10.17487/RFC3986, January 2005,
- .
-
- [RFC4122] Leach, P., Mealling, M., and R. Salz, "A Universally
- Unique IDentifier (UUID) URN Namespace", RFC 4122,
- DOI 10.17487/RFC4122, July 2005,
- .
-
- [RFC4589] Schulzrinne, H. and H. Tschofenig, "Location Types
- Registry", RFC 4589, DOI 10.17487/RFC4589, July 2006,
- .
-
- [RFC4648] Josefsson, S., "The Base16, Base32, and Base64 Data
- Encodings", RFC 4648, DOI 10.17487/RFC4648, October 2006,
- .
-
- [RFC5234] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax
- Specifications: ABNF", STD 68, RFC 5234,
- DOI 10.17487/RFC5234, January 2008,
- .
-
- [RFC5322] Resnick, P., Ed., "Internet Message Format", RFC 5322,
- DOI 10.17487/RFC5322, October 2008,
- .
-
- [RFC5545] Desruisseaux, B., Ed., "Internet Calendaring and
- Scheduling Core Object Specification (iCalendar)",
- RFC 5545, DOI 10.17487/RFC5545, September 2009,
- .
-
- [RFC5546] Daboo, C., Ed., "iCalendar Transport-Independent
- Interoperability Protocol (iTIP)", RFC 5546,
- DOI 10.17487/RFC5546, December 2009,
- .
-
- [RFC5646] Phillips, A., Ed. and M. Davis, Ed., "Tags for Identifying
- Languages", BCP 47, RFC 5646, DOI 10.17487/RFC5646,
- September 2009, .
-
- [RFC5870] Mayrhofer, A. and C. Spanring, "A Uniform Resource
- Identifier for Geographic Locations ('geo' URI)",
- RFC 5870, DOI 10.17487/RFC5870, June 2010,
- .
-
- [RFC6047] Melnikov, A., Ed., "iCalendar Message-Based
- Interoperability Protocol (iMIP)", RFC 6047,
- DOI 10.17487/RFC6047, December 2010,
- .
-
- [RFC6838] Freed, N., Klensin, J., and T. Hansen, "Media Type
- Specifications and Registration Procedures", BCP 13,
- RFC 6838, DOI 10.17487/RFC6838, January 2013,
- .
-
- [RFC6901] Bryan, P., Ed., Zyp, K., and M. Nottingham, Ed.,
- "JavaScript Object Notation (JSON) Pointer", RFC 6901,
- DOI 10.17487/RFC6901, April 2013,
- .
-
- [RFC7493] Bray, T., Ed., "The I-JSON Message Format", RFC 7493,
- DOI 10.17487/RFC7493, March 2015,
- .
-
- [RFC7529] Daboo, C. and G. Yakushev, "Non-Gregorian Recurrence Rules
- in the Internet Calendaring and Scheduling Core Object
- Specification (iCalendar)", RFC 7529,
- DOI 10.17487/RFC7529, May 2015,
- .
-
- [RFC7808] Douglass, M. and C. Daboo, "Time Zone Data Distribution
- Service", RFC 7808, DOI 10.17487/RFC7808, March 2016,
- .
-
- [RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for
- Writing an IANA Considerations Section in RFCs", BCP 26,
- RFC 8126, DOI 10.17487/RFC8126, June 2017,
- .
-
- [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
- 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
- May 2017, .
-
- [RFC8259] Bray, T., Ed., "The JavaScript Object Notation (JSON) Data
- Interchange Format", STD 90, RFC 8259,
- DOI 10.17487/RFC8259, December 2017,
- .
-
- [RFC8288] Nottingham, M., "Web Linking", RFC 8288,
- DOI 10.17487/RFC8288, October 2017,
- .
-
- [TZDB] IANA, "Time Zone Database",
- .
-
-9.2. Informative References
-
- [ISO.9070.1991]
- ISO/IEC, "Information technology -- SGML support
- facilities -- Registration procedures for public text
- owner identifiers", Edition 2, ISO/IEC 9070:1991, April
- 1991, .
-
- [LINKRELS] IANA, "Link Relations: Link Relation Types",
- .
-
- [LOCATIONTYPES]
- IANA, "Location Types Registry",
- .
-
- [MEDIATYPES]
- IANA, "Media Types",
- .
-
- [RFC6376] Crocker, D., Ed., Hansen, T., Ed., and M. Kucherawy, Ed.,
- "DomainKeys Identified Mail (DKIM) Signatures", STD 76,
- RFC 6376, DOI 10.17487/RFC6376, September 2011,
- .
-
- [RFC7265] Kewisch, P., Daboo, C., and M. Douglass, "jCal: The JSON
- Format for iCalendar", RFC 7265, DOI 10.17487/RFC7265, May
- 2014, .
-
- [RFC7986] Daboo, C., "New Properties for iCalendar", RFC 7986,
- DOI 10.17487/RFC7986, October 2016,
- .
-
-Acknowledgments
-
- The authors would like to thank the members of CalConnect for their
- valuable contributions. This specification originated from the work
- of the API technical committee of CalConnect: The Calendaring and
- Scheduling Consortium.
-
-Authors' Addresses
-
- Neil Jenkins
- Fastmail
- Collins St. West
- P.O. Box 234
- Melbourne VIC 8007
- Australia
-
- Email: neilj@fastmailteam.com
- URI: https://www.fastmail.com
-
-
- Robert Stepanek
- Fastmail
- Collins St. West
- P.O. Box 234
- Melbourne VIC 8007
- Australia
-
- Email: rsto@fastmailteam.com
- URI: https://www.fastmail.com
diff --git a/specifications/calendar/rfc9670.pdf b/specifications/calendar/rfc9670.pdf
deleted file mode 100644
index d63d9fd5..00000000
Binary files a/specifications/calendar/rfc9670.pdf and /dev/null differ
diff --git a/specifications/calendar/rfc9670.txt b/specifications/calendar/rfc9670.txt
deleted file mode 100644
index 13dd6891..00000000
--- a/specifications/calendar/rfc9670.txt
+++ /dev/null
@@ -1,857 +0,0 @@
-
-
-
-
-Internet Engineering Task Force (IETF) N. Jenkins, Ed.
-Request for Comments: 9670 Fastmail
-Updates: 8620 November 2024
-Category: Standards Track
-ISSN: 2070-1721
-
-
- JSON Meta Application Protocol (JMAP) Sharing
-
-Abstract
-
- This document specifies a data model for sharing data between users
- using the JSON Meta Application Protocol (JMAP). Future documents
- can reference this document when defining data types to support a
- consistent model of sharing.
-
-Status of This Memo
-
- This is an Internet Standards Track document.
-
- This document is a product of the Internet Engineering Task Force
- (IETF). It represents the consensus of the IETF community. It has
- received public review and has been approved for publication by the
- Internet Engineering Steering Group (IESG). Further information on
- Internet Standards is available in Section 2 of RFC 7841.
-
- Information about the current status of this document, any errata,
- and how to provide feedback on it may be obtained at
- https://www.rfc-editor.org/info/rfc9670.
-
-Copyright Notice
-
- Copyright (c) 2024 IETF Trust and the persons identified as the
- document authors. All rights reserved.
-
- This document is subject to BCP 78 and the IETF Trust's Legal
- Provisions Relating to IETF Documents
- (https://trustee.ietf.org/license-info) in effect on the date of
- publication of this document. Please review these documents
- carefully, as they describe your rights and restrictions with respect
- to this document. Code Components extracted from this document must
- include Revised BSD License text as described in Section 4.e of the
- Trust Legal Provisions and are provided without warranty as described
- in the Revised BSD License.
-
-Table of Contents
-
- 1. Introduction
- 1.1. Notational Conventions
- 1.2. Terminology
- 1.3. Data Model Overview
- 1.4. Subscribing to Shared Data
- 1.5. Addition to the Capabilities Object
- 1.5.1. urn:ietf:params:jmap:principals
- 1.5.2. urn:ietf:params:jmap:principals:owner
- 2. Principals
- 2.1. Principal/get
- 2.2. Principal/changes
- 2.3. Principal/set
- 2.4. Principal/query
- 2.4.1. Filtering
- 2.5. Principal/queryChanges
- 3. ShareNotifications
- 3.1. ShareNotification/get
- 3.2. ShareNotification/changes
- 3.3. ShareNotification/set
- 3.4. ShareNotification/query
- 3.4.1. Filtering
- 3.4.2. Sorting
- 3.5. ShareNotification/queryChanges
- 4. Framework for Shared Data
- 4.1. Example
- 5. Internationalization Considerations
- 6. Security Considerations
- 6.1. Spoofing
- 6.2. Unnoticed Sharing
- 6.3. Denial of Service
- 6.4. Unauthorized Principals
- 7. IANA Considerations
- 7.1. JMAP Capability Registration for "principals"
- 7.2. JMAP Capability Registration for "principals:owner"
- 7.3. JMAP Data Type Registration for "Principal"
- 7.4. JMAP Data Type Registration for "ShareNotification"
- 8. References
- 8.1. Normative References
- 8.2. Informative References
- Author's Address
-
-1. Introduction
-
- The JSON Meta Application Protocol (JMAP) [RFC8620] is a generic
- protocol for synchronizing data, such as mail, calendars, or
- contacts, between a client and a server. It is optimized for mobile
- and web environments and provides a consistent interface to query,
- read, and modify different data types, including comprehensive error
- handling.
-
- This specification defines a data model to represent entities in a
- collaborative environment and a framework for sharing data between
- them that can be used to provide a consistent sharing model for
- different data types. It does not define _what_ may be shared or the
- granularity of permissions, as this will depend on the data in
- question.
-
-1.1. Notational Conventions
-
- The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
- "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
- "OPTIONAL" in this document are to be interpreted as described in
- BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all
- capitals, as shown here.
-
- Type signatures, examples, and property descriptions in this document
- follow the conventions established in Section 1.1 of [RFC8620]. Data
- types defined in the core specification are also used in this
- document.
-
- Examples of API exchanges only show the methodCalls array of the
- Request object or the methodResponses array of the Response object.
- For compactness, the rest of the Request/Response object is omitted.
-
-1.2. Terminology
-
- The same terminology is used in this document as in the core JMAP
- specification. See [RFC8620], Section 1.6.
-
- The terms "Principal" and "ShareNotification" (with this specific
- capitalization) are used to refer to the data types defined in this
- document and instances of those data types.
-
-1.3. Data Model Overview
-
- A Principal (see Section 2) represents an individual, team, or
- resource (e.g., a room or projector). The object contains
- information about the entity being represented, such as a name,
- description, and time zone. It may also hold domain-specific
- information. A Principal may be associated with zero or more
- Accounts (see [RFC8620], Section 1.6.2) containing data belonging to
- the Principal. Managing the set of Principals within a system is out
- of scope for this specification, as it is highly domain specific. It
- is likely to map directly from a directory service or other user
- management system.
-
- Data types may allow users to share data with others by assigning
- permissions to Principals. When a user's permissions are changed, a
- ShareNotification object is created for them so a client can inform
- the user of the changes.
-
-1.4. Subscribing to Shared Data
-
- Permissions determine whether a user _may_ access data but not
- whether they _want_ to. Some shared data is of equal importance as
- the user's own, while other data is just there should the user wish
- to explicitly go find it. Clients will often want to differentiate
- the two. For example, a company may share mailing list archives for
- all departments with all employees, but a user may only generally be
- interested in the few they belong to. They would have _permission_
- to access many mailboxes but can _subscribe_ to just the ones they
- care about. The client would provide separate interfaces for reading
- mail in subscribed mailboxes and browsing all mailboxes they have
- permission to access in order to manage those that they are
- subscribed to.
-
- The JMAP Session object (see [RFC8620], Section 2) is defined to
- include an object in the "accounts" property for every Account that
- the user has access to. Collaborative systems may share data between
- a very large number of Principals, most of which the user does not
- care about day to day. For servers implementing this specification,
- the Session object MUST only include Accounts where either the user
- is subscribed to at least one record (see [RFC8620], Section 1.6.3)
- in the Account or the Account belongs to the user. StateChange
- events ([RFC8620], Section 7.1) for changes to data SHOULD only be
- sent for data the user has subscribed to and MUST NOT be sent for any
- Account where the user is not subscribed to any records in the
- Account, except where that Account belongs to the user.
-
- The server MAY reject the user's attempt to subscribe to some
- resources even if they have permission to access them (e.g., a
- calendar representing a location).
-
- A user can query the set of Principals they have access to with
- "Principal/query" (see Section 2.4). The Principal object will
- contain an Account object for all Accounts where the user has
- permission to access data for that Principal, even if they are not
- yet subscribed.
-
-1.5. Addition to the Capabilities Object
-
- The capabilities object is returned as part of the JMAP Session
- object; see [RFC8620], Section 2. This document defines two
- additional capability URIs.
-
-1.5.1. urn:ietf:params:jmap:principals
-
- The urn:ietf:params:jmap:principals capability represents support for
- the Principal and ShareNotification data types and associated API
- methods.
-
- The value of this property in the JMAP Session "capabilities"
- property is an empty object.
-
- The value of this property in an Account's "accountCapabilities"
- property is an object that MUST contain the following information on
- server capabilities and permissions for that Account:
-
- *currentUserPrincipalId*: Id|null
- The id of the Principal in this Account that corresponds to the
- user fetching this object, if any.
-
-1.5.2. urn:ietf:params:jmap:principals:owner
-
- The URI urn:ietf:params:jmap:principals:owner is solely used as a key
- in an Account's "accountCapabilities" property. It does not appear
- in the JMAP Session capabilities -- support is indicated by the
- urn:ietf:params:jmap:principals URI being present in the session
- capabilities.
-
- If urn:ietf:params:jmap:principals:owner is a key in an Account's
- "accountCapabilities" property, that Account (and the data therein)
- is owned by a Principal. Some Accounts may not be owned by a
- Principal (e.g., the Account that contains the data for the
- Principals themselves), in which case this property is omitted.
-
- The value of this property is an object with the following
- properties:
-
- *accountIdForPrincipal*: Id
- The id of an Account with the urn:ietf:params:jmap:principals
- capability that contains the corresponding Principal object.
-
- *principalId*:Id
- The id of the Principal that owns this Account.
-
-2. Principals
-
- A Principal represents an individual, a group, a location (e.g., a
- room), a resource (e.g., a projector), or another entity in a
- collaborative environment. Sharing in JMAP is generally configured
- by assigning rights to certain data within an Account to other
- Principals. For example, a user may assign permission to read their
- calendar to a Principal representing another user or their team.
-
- In a shared environment, such as a workplace, a user may have access
- to a large number of Principals.
-
- In most systems, the user will have access to a single Account
- containing Principal objects. In some situations, for example, when
- aggregating data from different places, there may be multiple
- Accounts containing Principal objects.
-
- A *Principal* object has the following properties:
-
- *id*: Id (immutable; server-set)
- The id of the Principal.
-
- *type*: String
- This MUST be one of the following values:
-
- * "individual": This represents a single person.
- * "group": This represents a group of other Principals.
- * "resource": This represents some resource, e.g., a projector.
- * "location": This represents a location.
- * "other": This represents some other undefined Principal.
-
- *name*: String
- The name of the Principal, e.g., "Jane Doe" or "Room 4B".
-
- *description*: String|null
- A longer description of the Principal, for example, details about
- the facilities of a resource, or null if no description is
- available.
-
- *email*: String|null
- An email address for the Principal, or null if no email is
- available. If given, the value MUST conform to the "addr-spec"
- syntax, as defined in [RFC5322], Section 3.4.1.
-
- *timeZone*: String|null
- The time zone for this Principal, if known. If not null, the
- value MUST be a time zone name from the IANA Time Zone Database
- [IANA-TZDB].
-
- *capabilities*: String[Object] (server-set)
- A map of JMAP capability URIs to domain-specific information about
- the Principal in relation to that capability, as defined in the
- document that registered the capability.
-
- *accounts*: Id[Account]|null (server-set)
- A map of Account id to Account object for each JMAP Account
- containing data for this Principal that the user has access to, or
- null if none.
-
-2.1. Principal/get
-
- This is a standard "/get" method as described in [RFC8620],
- Section 5.1.
-
-2.2. Principal/changes
-
- This is a standard "/changes" method as described in [RFC8620],
- Section 5.2.
-
- | Note: Implementations backed by an external directory may be
- | unable to calculate changes. In this case, they will always
- | return a "cannotCalculateChanges" error as described in the
- | core JMAP specification.
-
-2.3. Principal/set
-
- This is a standard "/set" method as described in [RFC8620],
- Section 5.3.
-
- Managing Principals is likely tied to a directory service or some
- other vendor-specific solution. This management may occur out of
- band or via an additional capability defined elsewhere. Allowing
- direct user modification of properties has security considerations,
- as noted in Section 6. A server MUST reject any change it doesn't
- allow with a "forbidden" SetError.
-
- Where a server does support changes via this API, it SHOULD allow an
- update to the "name", "description", and "timeZone" properties of the
- Principal with the same id as the "currentUserPrincipalId" in the
- Account capabilities. This allows the user to update their own
- details.
-
-2.4. Principal/query
-
- This is a standard "/query" method as described in [RFC8620],
- Section 5.5.
-
-2.4.1. Filtering
-
- A *FilterCondition* object has the following properties, all of which
- are optional:
-
- *accountIds*: String[]
- A list of Account ids. The Principal matches if any of the ids in
- this list are keys in the Principal's "accounts" property (i.e.,
- if any of the Account ids belong to the Principal).
-
- *email*: String
- The email property of the Principal contains the given string.
-
- *name*: String
- The name property of the Principal contains the given string.
-
- *text*: String
- The name, email, or description property of the Principal contains
- the given string.
-
- *type*: String
- The type must be exactly as given to match the condition.
-
- *timeZone*: String
- The timeZone must be exactly as given to match the condition.
-
- All given conditions in the FilterCondition object must match for the
- Principal to match.
-
- Text matches for "contains" SHOULD be simple substring matches.
-
-2.5. Principal/queryChanges
-
- This is a standard "/queryChanges" method as described in [RFC8620],
- Section 5.6.
-
- | Note: Implementations backed by an external directory may be
- | unable to calculate changes. In this case, they will always
- | return a "cannotCalculateChanges" error as described in the
- | core JMAP specification.
-
-3. ShareNotifications
-
- The ShareNotification data type records when the user's permissions
- to access a shared object changes. ShareNotifications are only
- created by the server; users cannot create them explicitly. They are
- stored in the same Account as the Principals.
-
- Clients may present the list of notifications to the user and allow
- the user to dismiss them. To dismiss a notification, use a standard
- "/set" call to destroy it.
-
- The server SHOULD create a ShareNotification whenever the user's
- permissions change on an object. It MAY choose not to create a
- notification for permission changes to a group Principal, even if the
- user is in the group, if this is more likely to be overwhelming than
- helpful, or if it would create excessive notifications within the
- system.
-
- The server MAY limit the maximum number of notifications it will
- store for a user. When the limit is reached, any new notification
- will cause the previously oldest notification to be automatically
- deleted.
-
- The server MAY coalesce notifications if appropriate or remove
- notifications after a certain period of time or that it deems are no
- longer relevant.
-
- A *ShareNotification* object has the following properties:
-
- *id*: String (immutable; server-set)
- The id of the ShareNotification.
-
- *created*: UTCDate (immutable; server-set)
- The time this notification was created.
-
- *changedBy*: Entity (immutable; server-set)
- Who made the change. An *Entity* object has the following
- properties:
-
- *name*: String
- The name of the entity who made the change.
- *email*: String|null
- The email of the entity who made the change, or null if no
- email is available.
- *principalId*: Id|null
- The id of the Principal corresponding to the entity who made
- the change, or null if no associated Principal.
-
- *objectType*: String (immutable; server-set)
- The name of the data type for the object whose permissions have
- changed, as registered in the IANA "JMAP Data Types" registry
- [IANA-JMAP], e.g., "Calendar" or "Mailbox".
-
- *objectAccountId*: Id (immutable; server-set)
- The id of the Account where this object exists.
-
- *objectId*: Id (immutable; server-set)
- The id of the object that this notification is about.
-
- *oldRights*: String[Boolean]|null (immutable; server-set)
- The "myRights" property of the object for the user before the
- change.
-
- *newRights*: String[Boolean]|null (immutable; server-set)
- The "myRights" property of the object for the user after the
- change.
-
- *name*: String (immutable; server-set)
- The name of the object at the time the notification was made.
- Determining the name will depend on the data type in question.
- For example, it might be the "title" property of a CalendarEvent
- or the "name" of a Mailbox. The name is to show users who have
- had their access rights to the object removed what it is that they
- can no longer access.
-
-3.1. ShareNotification/get
-
- This is a standard "/get" method as described in [RFC8620],
- Section 5.1.
-
-3.2. ShareNotification/changes
-
- This is a standard "/changes" method as described in [RFC8620],
- Section 5.2.
-
-3.3. ShareNotification/set
-
- This is a standard "/set" method as described in [RFC8620],
- Section 5.3.
-
- Only destroy is supported; any attempt to create/update MUST be
- rejected with a "forbidden" SetError.
-
-3.4. ShareNotification/query
-
- This is a standard "/query" method as described in [RFC8620],
- Section 5.5.
-
-3.4.1. Filtering
-
- A *FilterCondition* object has the following properties, all of which
- are optional:
-
- *after*: UTCDate|null
- The creation date must be on or after this date to match the
- condition.
-
- *before*: UTCDate|null
- The creation date must be before this date to match the condition.
-
- *objectType*: String
- The objectType value must be identical to the given value to match
- the condition.
-
- *objectAccountId*: Id
- The objectAccountId value must be identical to the given value to
- match the condition.
-
- All given conditions in the FilterCondition object must match for the
- ShareNotification to match.
-
-3.4.2. Sorting
-
- The "created" property MUST be supported for sorting.
-
-3.5. ShareNotification/queryChanges
-
- This is a standard "/queryChanges" method as described in [RFC8620],
- Section 5.6.
-
-4. Framework for Shared Data
-
- Shareable data types MUST define the following three properties:
-
- *isSubscribed*: Boolean
- The value true indicates that the user wishes to subscribe to see
- this data. The value false indicates that the user does not wish
- to subscribe to see this data. The initial value for this
- property when data is shared by another user is implementation
- dependent, although data types may give advice on appropriate
- defaults.
-
- *myRights*: String[Boolean]
- The set of permissions the user currently has. Appropriate
- permissions are domain specific and must be defined per data type.
- Each key is the name of a permission defined for that data type.
- The value for the key is true if the user has the permission or
- false if they do not.
-
- *shareWith*: Id[String[Boolean]]|null
- The value of this property is null if the data is not shared with
- anyone. Otherwise, it is a map where each key is the id of a
- Principal with which this data is shared, and the value associated
- with that key is the rights to give that Principal, in the same
- format as the "myRights" property. The Account id for the
- Principal id can be found in the capabilities of the Account this
- object is in (see Section 1.5.2).
-
- Users with appropriate permission may set this property to modify
- who the data is shared with. The Principal that owns the Account
- that this data is in MUST NOT be in the map, since the owner's
- rights are implicit.
-
-4.1. Example
-
- Suppose we are designing a data model for a very simple to-do list.
- There is a Todo data type representing a single item to do, each of
- which belongs to a single TodoList. The specification makes the
- TodoLists shareable by referencing this document and defining the
- common properties.
-
- First, it would define a set of domain-specific rights. For example,
- a TodoListRights object may have the following properties:
-
- *mayRead*: Boolean
- The user may fetch this TodoList and any Todos that belong to this
- TodoList.
-
- *mayWrite*: Boolean
- The user may create, update, or destroy Todos that belong to this
- TodoList and may change the "name" property of this TodoList.
-
- *mayAdmin*: Boolean
- The user may see and modify the "myRights" property of this
- TodoList and may destroy this TodoList.
-
- Then in the TodoList data type, we would include the three common
- properties described in Section 4, in addition to any type-specific
- properties (like "name" in this case):
-
- *id*: Id (immutable; server-set)
- The id of the object.
-
- *name*: String
- A name for this list of Todos.
-
- *isSubscribed*: Boolean
- True if the user has indicated they wish to see this list. If
- false, clients should not display this TodoList with the user's
- other TodoLists but should provide a means for users to see and
- subscribe to all TodoLists that have been shared with them.
-
- *myRights*: TodoListRights
- The set of permissions the user currently has for this TodoList.
-
- *shareWith*: Id[TodoListRights]|null
- If not shared with anyone, the value is null. Otherwise, it's a
- map where the keys are Principal ids and the values are the rights
- given to those Principals. Users with the "mayAdmin" right may
- set this property to modify who the data is shared with. The
- Principal that owns the Account that this data is in MUST NOT be
- in the map; their rights are implicit.
-
- We would also define a new Principal capability with two properties:
-
- *accountId*: Id|null
- The accountId containing the Todo data for this Principal, if it
- has been shared with the requesting user.
-
- *mayShareWith*: Boolean
- The user may give this Principal permission to access a TodoList.
-
- A client wishing to let the user configure sharing would look at the
- "capabilities" for the Account containing the user's Todo data and
- find the "urn:ietf:params:jmap:principals:owner" property, as per
- Section 1.5.2. For example, the JMAP Session object might contain:
-
- {
- "accounts": {
- "u12345678": {
- "name": "jane.doe@example.com",
- "isPersonal": true,
- "isReadOnly": false,
- "accountCapabilities": {
- "urn:com.example:jmap:todo": {},
- "urn:ietf:params:jmap:principals:owner": {
- "accountIdForPrincipal": "u33084183",
- "principalId": "P105aga511jaa"
- }
- }
- },
- ...
- },
- ...
- }
-
- Figure 1: Part of a JMAP Session Object
-
- From this, the client now knows which Account has the Principal data,
- and it can fetch the list of Principals and offer to share it with
- the user by making an API request like this:
-
- [[ "Principal/get", {
- "accountId": "u33084183",
- "ids": null
- }, "0" ]]
-
- Figure 2: "methodCalls" Property of a JMAP Request
-
- Here's an example response (where "Joe Bloggs" is another user that
- this user could share their TodoList with; Joe has not shared any of
- their own data with this user, so the "accounts" property is null):
-
- [[ "Principal/get", {
- "accountId": "u33084183",
- "state": "7b8eff5zz",
- "list": [{
- "id": "P2342fnddd20",
- "type": "individual",
- "name": "Joe Bloggs",
- "description": null,
- "email": "joe.bloggs@example.com",
- "timeZone": "Australia/Melbourne",
- "capabilities": {
- "urn:com.example:jmap:todo": {
- "accountId": null,
- "mayShareWith": true
- }
- },
- "accounts": null
- }, {
- "id": "P674pp24095qo49pr",
- "name": "Board room",
- "type": "location",
- ...
- }, ... ],
- "notFound": []
- }, "0" ]]
-
- Figure 3: "methodResponses" Property of a JMAP Response
-
- A TodoList can be shared with "Joe Bloggs" by updating its shareWith
- property, as in this example request:
-
- [[ "TodoList/set", {
- "accountId": "u12345678",
- "update": {
- "tl01n231": {
- "shareWith": {
- "P2342fnddd20": {
- "mayRead": true,
- "mayWrite": true,
- "mayAdmin": false
- }
- }
- }
- }
- }, "0" ]]
-
- Figure 4: "methodCalls" Property of a JMAP Request
-
-5. Internationalization Considerations
-
- Experience has shown that unrestricted use of Unicode can lead to
- problems such as inconsistent rendering, users reading text and
- interpreting it differently than intended, and unexpected results
- when copying text from one location to another. Servers MAY choose
- to mitigate this by restricting the set of characters allowed in
- otherwise unconstrained String fields. The FreeformClass, as
- documented in [RFC8264], Section 4.3, might be a good starting point
- for this.
-
- Attempts to set a value containing code points outside of the
- permissible set can be handled in a few ways by the server. The
- first option is to simply strip the forbidden characters and store
- the resulting string. This is likely to be appropriate for control
- characters, for example, where they can end up in data accidentally
- due to copy-and-paste issues and are probably invisible to the end
- user. JMAP allows the server to transform data on create/update, as
- long as any changed properties are returned to the client in the
- "/set" response so it knows what has changed, as per [RFC8620],
- Section 5.3. Alternatively, the server MAY just reject the create/
- update with an "invalidProperties" SetError.
-
-6. Security Considerations
-
- All security considerations of JMAP [RFC8620] apply to this
- specification. Additional considerations are detailed below.
-
-6.1. Spoofing
-
- Allowing users to edit their own Principal's name (and, to a lesser
- extent, email, description, or type) could allow a user to change
- their Principal to look like another user in the system, potentially
- tricking others into sharing private data with them. Servers may
- choose to forbid this and SHOULD keep logs of such changes to provide
- an audit trail.
-
- Note that simply forbidding the use of a name already in the system
- is insufficient protection, as a malicious user could still change
- their name to something easily confused with the existing name by
- using trivial misspellings or visually similar Unicode characters.
-
-6.2. Unnoticed Sharing
-
- Sharing data with another user allows someone to turn a transitory
- account compromise (e.g., brief access to an unlocked or logged-in
- client) into a persistent compromise (by setting up sharing with a
- user that is controlled by the attacker). This can be mitigated by
- requiring further authorization for configuring sharing or sending
- notifications to the sharer via another channel whenever a new
- permission is added.
-
-6.3. Denial of Service
-
- By creating many changes to the sharing status of objects, a user can
- cause many ShareNotifications to be generated, which could lead to
- resource exhaustion. Servers can mitigate this by coalescing
- multiple changes to the same object into a single notification,
- limiting the maximum number of notifications it stores per user and/
- or rate-limiting the changes to sharing permissions in the first
- place. Automatically deleting older notifications after reaching a
- limit can mean the user is not made aware of a sharing change, which
- can itself be a security issue. For this reason, it is better to
- coalesce changes and use other mitigation strategies.
-
-6.4. Unauthorized Principals
-
- The set of Principals within a shared environment MUST be strictly
- controlled. If adding a new Principal is open to the public, risks
- include:
-
- * An increased risk of a user accidentally sharing data with an
- unintended person.
- * An attacker sharing unwanted or offensive information with the
- user.
- * An attacker sharing items with spam content in the names in order
- to generate ShareNotification objects, which are likely to be
- prominently displayed to the user receiving them.
-
-7. IANA Considerations
-
-7.1. JMAP Capability Registration for "principals"
-
- IANA has registered "principals" in the "JMAP Capabilities" registry
- as follows:
-
- Capability Name: urn:ietf:params:jmap:principals
- Intended Use: common
- Change Controller: IETF
- Security and Privacy Considerations: RFC 9670, Section 6
- Reference: RFC 9670
-
-7.2. JMAP Capability Registration for "principals:owner"
-
- IANA has registered "principals:owner" in the "JMAP Capabilities"
- registry as follows:
-
- Capability Name: urn:ietf:params:jmap:principals:owner
- Intended Use: common
- Change Controller: IETF
- Security and Privacy Considerations: RFC 9670, Section 6
- Reference: RFC 9670
-
-7.3. JMAP Data Type Registration for "Principal"
-
- IANA has registered "Principal" in the "JMAP Data Types" registry as
- follows:
-
- Type Name: Principal
- Can Reference Blobs: No
- Can Use for State Change: Yes
- Capability: urn:ietf:params:jmap:principals
- Reference: RFC 9670
-
-7.4. JMAP Data Type Registration for "ShareNotification"
-
- IANA has registered "ShareNotification" in the "JMAP Data Types"
- registry as follows:
-
- Type Name: ShareNotification
- Can Reference Blobs: No
- Can Use for State Change: Yes
- Capability: urn:ietf:params:jmap:principals
- Reference: RFC 9670
-
-8. References
-
-8.1. Normative References
-
- [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
- Requirement Levels", BCP 14, RFC 2119,
- DOI 10.17487/RFC2119, March 1997,
- .
-
- [RFC5322] Resnick, P., Ed., "Internet Message Format", RFC 5322,
- DOI 10.17487/RFC5322, October 2008,
- .
-
- [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
- 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
- May 2017, .
-
- [RFC8620] Jenkins, N. and C. Newman, "The JSON Meta Application
- Protocol (JMAP)", RFC 8620, DOI 10.17487/RFC8620, July
- 2019, .
-
-8.2. Informative References
-
- [IANA-JMAP]
- IANA, "JMAP Data Types",
- .
-
- [IANA-TZDB]
- IANA, "Time Zone Database",
- .
-
- [RFC8264] Saint-Andre, P. and M. Blanchet, "PRECIS Framework:
- Preparation, Enforcement, and Comparison of
- Internationalized Strings in Application Protocols",
- RFC 8264, DOI 10.17487/RFC8264, October 2017,
- .
-
-Author's Address
-
- Neil Jenkins (editor)
- Fastmail
- PO Box 234, Collins St West
- Melbourne VIC 8007
- Australia
- Email: neilj@fastmailteam.com
- URI: https://www.fastmail.com
diff --git a/specifications/contacts/rfc6350.pdf b/specifications/contacts/rfc6350.pdf
deleted file mode 100644
index a40987ca..00000000
Binary files a/specifications/contacts/rfc6350.pdf and /dev/null differ
diff --git a/specifications/contacts/rfc6350.txt b/specifications/contacts/rfc6350.txt
deleted file mode 100644
index d853cbc6..00000000
--- a/specifications/contacts/rfc6350.txt
+++ /dev/null
@@ -1,4147 +0,0 @@
-
-
-
-
-
-
-Internet Engineering Task Force (IETF) S. Perreault
-Request for Comments: 6350 Viagenie
-Obsoletes: 2425, 2426, 4770 August 2011
-Updates: 2739
-Category: Standards Track
-ISSN: 2070-1721
-
-
- vCard Format Specification
-
-Abstract
-
- This document defines the vCard data format for representing and
- exchanging a variety of information about individuals and other
- entities (e.g., formatted and structured name and delivery addresses,
- email address, multiple telephone numbers, photograph, logo, audio
- clips, etc.). This document obsoletes RFCs 2425, 2426, and 4770, and
- updates RFC 2739.
-
-Status of This Memo
-
- This is an Internet Standards Track document.
-
- This document is a product of the Internet Engineering Task Force
- (IETF). It represents the consensus of the IETF community. It has
- received public review and has been approved for publication by the
- Internet Engineering Steering Group (IESG). Further information on
- Internet Standards is available in Section 2 of RFC 5741.
-
- Information about the current status of this document, any errata,
- and how to provide feedback on it may be obtained at
- http://www.rfc-editor.org/info/rfc6350.
-
-Copyright Notice
-
- Copyright (c) 2011 IETF Trust and the persons identified as the
- document authors. All rights reserved.
-
- This document is subject to BCP 78 and the IETF Trust's Legal
- Provisions Relating to IETF Documents
- (http://trustee.ietf.org/license-info) in effect on the date of
- publication of this document. Please review these documents
- carefully, as they describe your rights and restrictions with respect
- to this document. Code Components extracted from this document must
- include Simplified BSD License text as described in Section 4.e of
- the Trust Legal Provisions and are provided without warranty as
- described in the Simplified BSD License.
-
-
-
-
-Perreault Standards Track [Page 1]
-
-RFC 6350 vCard August 2011
-
-
- This document may contain material from IETF Documents or IETF
- Contributions published or made publicly available before November
- 10, 2008. The person(s) controlling the copyright in some of this
- material may not have granted the IETF Trust the right to allow
- modifications of such material outside the IETF Standards Process.
- Without obtaining an adequate license from the person(s) controlling
- the copyright in such materials, this document may not be modified
- outside the IETF Standards Process, and derivative works of it may
- not be created outside the IETF Standards Process, except to format
- it for publication as an RFC or to translate it into languages other
- than English.
-
-Table of Contents
-
- 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 5
- 2. Conventions . . . . . . . . . . . . . . . . . . . . . . . . . 5
- 3. vCard Format Specification . . . . . . . . . . . . . . . . . . 5
- 3.1. Charset . . . . . . . . . . . . . . . . . . . . . . . . . 5
- 3.2. Line Delimiting and Folding . . . . . . . . . . . . . . . 5
- 3.3. ABNF Format Definition . . . . . . . . . . . . . . . . . . 6
- 3.4. Property Value Escaping . . . . . . . . . . . . . . . . . 9
- 4. Property Value Data Types . . . . . . . . . . . . . . . . . . 9
- 4.1. TEXT . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
- 4.2. URI . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
- 4.3. DATE, TIME, DATE-TIME, DATE-AND-OR-TIME, and TIMESTAMP . . 12
- 4.3.1. DATE . . . . . . . . . . . . . . . . . . . . . . . . . 12
- 4.3.2. TIME . . . . . . . . . . . . . . . . . . . . . . . . . 13
- 4.3.3. DATE-TIME . . . . . . . . . . . . . . . . . . . . . . 13
- 4.3.4. DATE-AND-OR-TIME . . . . . . . . . . . . . . . . . . . 14
- 4.3.5. TIMESTAMP . . . . . . . . . . . . . . . . . . . . . . 14
- 4.4. BOOLEAN . . . . . . . . . . . . . . . . . . . . . . . . . 14
- 4.5. INTEGER . . . . . . . . . . . . . . . . . . . . . . . . . 15
- 4.6. FLOAT . . . . . . . . . . . . . . . . . . . . . . . . . . 15
- 4.7. UTC-OFFSET . . . . . . . . . . . . . . . . . . . . . . . . 15
- 4.8. LANGUAGE-TAG . . . . . . . . . . . . . . . . . . . . . . . 16
- 5. Property Parameters . . . . . . . . . . . . . . . . . . . . . 16
- 5.1. LANGUAGE . . . . . . . . . . . . . . . . . . . . . . . . . 16
- 5.2. VALUE . . . . . . . . . . . . . . . . . . . . . . . . . . 16
- 5.3. PREF . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
- 5.4. ALTID . . . . . . . . . . . . . . . . . . . . . . . . . . 18
- 5.5. PID . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
- 5.6. TYPE . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
- 5.7. MEDIATYPE . . . . . . . . . . . . . . . . . . . . . . . . 20
- 5.8. CALSCALE . . . . . . . . . . . . . . . . . . . . . . . . . 20
- 5.9. SORT-AS . . . . . . . . . . . . . . . . . . . . . . . . . 21
- 5.10. GEO . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
- 5.11. TZ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
-
-
-
-
-Perreault Standards Track [Page 2]
-
-RFC 6350 vCard August 2011
-
-
- 6. vCard Properties . . . . . . . . . . . . . . . . . . . . . . . 23
- 6.1. General Properties . . . . . . . . . . . . . . . . . . . . 23
- 6.1.1. BEGIN . . . . . . . . . . . . . . . . . . . . . . . . 23
- 6.1.2. END . . . . . . . . . . . . . . . . . . . . . . . . . 23
- 6.1.3. SOURCE . . . . . . . . . . . . . . . . . . . . . . . . 24
- 6.1.4. KIND . . . . . . . . . . . . . . . . . . . . . . . . . 25
- 6.1.5. XML . . . . . . . . . . . . . . . . . . . . . . . . . 27
- 6.2. Identification Properties . . . . . . . . . . . . . . . . 28
- 6.2.1. FN . . . . . . . . . . . . . . . . . . . . . . . . . . 28
- 6.2.2. N . . . . . . . . . . . . . . . . . . . . . . . . . . 29
- 6.2.3. NICKNAME . . . . . . . . . . . . . . . . . . . . . . . 29
- 6.2.4. PHOTO . . . . . . . . . . . . . . . . . . . . . . . . 30
- 6.2.5. BDAY . . . . . . . . . . . . . . . . . . . . . . . . . 30
- 6.2.6. ANNIVERSARY . . . . . . . . . . . . . . . . . . . . . 31
- 6.2.7. GENDER . . . . . . . . . . . . . . . . . . . . . . . . 32
- 6.3. Delivery Addressing Properties . . . . . . . . . . . . . . 32
- 6.3.1. ADR . . . . . . . . . . . . . . . . . . . . . . . . . 32
- 6.4. Communications Properties . . . . . . . . . . . . . . . . 34
- 6.4.1. TEL . . . . . . . . . . . . . . . . . . . . . . . . . 34
- 6.4.2. EMAIL . . . . . . . . . . . . . . . . . . . . . . . . 36
- 6.4.3. IMPP . . . . . . . . . . . . . . . . . . . . . . . . . 36
- 6.4.4. LANG . . . . . . . . . . . . . . . . . . . . . . . . . 37
- 6.5. Geographical Properties . . . . . . . . . . . . . . . . . 37
- 6.5.1. TZ . . . . . . . . . . . . . . . . . . . . . . . . . . 37
- 6.5.2. GEO . . . . . . . . . . . . . . . . . . . . . . . . . 38
- 6.6. Organizational Properties . . . . . . . . . . . . . . . . 39
- 6.6.1. TITLE . . . . . . . . . . . . . . . . . . . . . . . . 39
- 6.6.2. ROLE . . . . . . . . . . . . . . . . . . . . . . . . . 39
- 6.6.3. LOGO . . . . . . . . . . . . . . . . . . . . . . . . . 40
- 6.6.4. ORG . . . . . . . . . . . . . . . . . . . . . . . . . 40
- 6.6.5. MEMBER . . . . . . . . . . . . . . . . . . . . . . . . 41
- 6.6.6. RELATED . . . . . . . . . . . . . . . . . . . . . . . 42
- 6.7. Explanatory Properties . . . . . . . . . . . . . . . . . . 43
- 6.7.1. CATEGORIES . . . . . . . . . . . . . . . . . . . . . . 43
- 6.7.2. NOTE . . . . . . . . . . . . . . . . . . . . . . . . . 44
- 6.7.3. PRODID . . . . . . . . . . . . . . . . . . . . . . . . 44
- 6.7.4. REV . . . . . . . . . . . . . . . . . . . . . . . . . 45
- 6.7.5. SOUND . . . . . . . . . . . . . . . . . . . . . . . . 45
- 6.7.6. UID . . . . . . . . . . . . . . . . . . . . . . . . . 46
- 6.7.7. CLIENTPIDMAP . . . . . . . . . . . . . . . . . . . . . 47
- 6.7.8. URL . . . . . . . . . . . . . . . . . . . . . . . . . 47
- 6.7.9. VERSION . . . . . . . . . . . . . . . . . . . . . . . 48
- 6.8. Security Properties . . . . . . . . . . . . . . . . . . . 48
- 6.8.1. KEY . . . . . . . . . . . . . . . . . . . . . . . . . 48
- 6.9. Calendar Properties . . . . . . . . . . . . . . . . . . . 49
- 6.9.1. FBURL . . . . . . . . . . . . . . . . . . . . . . . . 49
- 6.9.2. CALADRURI . . . . . . . . . . . . . . . . . . . . . . 50
- 6.9.3. CALURI . . . . . . . . . . . . . . . . . . . . . . . . 50
-
-
-
-Perreault Standards Track [Page 3]
-
-RFC 6350 vCard August 2011
-
-
- 6.10. Extended Properties and Parameters . . . . . . . . . . . . 51
- 7. Synchronization . . . . . . . . . . . . . . . . . . . . . . . 51
- 7.1. Mechanisms . . . . . . . . . . . . . . . . . . . . . . . . 51
- 7.1.1. Matching vCard Instances . . . . . . . . . . . . . . . 51
- 7.1.2. Matching Property Instances . . . . . . . . . . . . . 52
- 7.1.3. PID Matching . . . . . . . . . . . . . . . . . . . . . 52
- 7.2. Example . . . . . . . . . . . . . . . . . . . . . . . . . 53
- 7.2.1. Creation . . . . . . . . . . . . . . . . . . . . . . . 53
- 7.2.2. Initial Sharing . . . . . . . . . . . . . . . . . . . 53
- 7.2.3. Adding and Sharing a Property . . . . . . . . . . . . 54
- 7.2.4. Simultaneous Editing . . . . . . . . . . . . . . . . . 54
- 7.2.5. Global Context Simplification . . . . . . . . . . . . 56
- 8. Example: Author's vCard . . . . . . . . . . . . . . . . . . . 56
- 9. Security Considerations . . . . . . . . . . . . . . . . . . . 57
- 10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 58
- 10.1. Media Type Registration . . . . . . . . . . . . . . . . . 58
- 10.2. Registering New vCard Elements . . . . . . . . . . . . . . 59
- 10.2.1. Registration Procedure . . . . . . . . . . . . . . . . 59
- 10.2.2. Vendor Namespace . . . . . . . . . . . . . . . . . . . 60
- 10.2.3. Registration Template for Properties . . . . . . . . . 61
- 10.2.4. Registration Template for Parameters . . . . . . . . . 61
- 10.2.5. Registration Template for Value Data Types . . . . . . 62
- 10.2.6. Registration Template for Values . . . . . . . . . . . 62
- 10.3. Initial vCard Elements Registries . . . . . . . . . . . . 63
- 10.3.1. Properties Registry . . . . . . . . . . . . . . . . . 64
- 10.3.2. Parameters Registry . . . . . . . . . . . . . . . . . 65
- 10.3.3. Value Data Types Registry . . . . . . . . . . . . . . 65
- 10.3.4. Values Registries . . . . . . . . . . . . . . . . . . 66
- 11. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 69
- 12. References . . . . . . . . . . . . . . . . . . . . . . . . . . 69
- 12.1. Normative References . . . . . . . . . . . . . . . . . . . 69
- 12.2. Informative References . . . . . . . . . . . . . . . . . . 71
- Appendix A. Differences from RFCs 2425 and 2426 . . . . . . . . . 73
- A.1. New Structure . . . . . . . . . . . . . . . . . . . . . . 73
- A.2. Removed Features . . . . . . . . . . . . . . . . . . . . . 73
- A.3. New Properties and Parameters . . . . . . . . . . . . . . 73
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Perreault Standards Track [Page 4]
-
-RFC 6350 vCard August 2011
-
-
-1. Introduction
-
- Electronic address books have become ubiquitous. Their increased
- presence on portable, connected devices as well as the diversity of
- platforms that exchange contact data call for a standard. This memo
- defines the vCard format, which allows the capture and exchange of
- information normally stored within an address book or directory
- application.
-
- A high-level overview of the differences from RFCs 2425 and 2426 can
- be found in Appendix A.
-
-2. Conventions
-
- The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
- "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
- "OPTIONAL" in this document are to be interpreted as described in
- [RFC2119].
-
-3. vCard Format Specification
-
- The text/vcard MIME content type (hereafter known as "vCard"; see
- Section 10.1) contains contact information, typically pertaining to a
- single contact or group of contacts. The content consists of one or
- more lines in the format given below.
-
-3.1. Charset
-
- The charset (see [RFC3536] for internationalization terminology) for
- vCard is UTF-8 as defined in [RFC3629]. There is no way to override
- this. It is invalid to specify a value other than "UTF-8" in the
- "charset" MIME parameter (see Section 10.1).
-
-3.2. Line Delimiting and Folding
-
- Individual lines within vCard are delimited by the [RFC5322] line
- break, which is a CRLF sequence (U+000D followed by U+000A). Long
- logical lines of text can be split into a multiple-physical-line
- representation using the following folding technique. Content lines
- SHOULD be folded to a maximum width of 75 octets, excluding the line
- break. Multi-octet characters MUST remain contiguous. The rationale
- for this folding process can be found in [RFC5322], Section 2.1.1.
-
- A logical line MAY be continued on the next physical line anywhere
- between two characters by inserting a CRLF immediately followed by a
- single white space character (space (U+0020) or horizontal tab
- (U+0009)). The folded line MUST contain at least one character. Any
- sequence of CRLF followed immediately by a single white space
-
-
-
-Perreault Standards Track [Page 5]
-
-RFC 6350 vCard August 2011
-
-
- character is ignored (removed) when processing the content type. For
- example, the line:
-
- NOTE:This is a long description that exists on a long line.
-
- can be represented as:
-
- NOTE:This is a long description
- that exists on a long line.
-
- It could also be represented as:
-
- NOTE:This is a long descrip
- tion that exists o
- n a long line.
-
- The process of moving from this folded multiple-line representation
- of a property definition to its single-line representation is called
- unfolding. Unfolding is accomplished by regarding CRLF immediately
- followed by a white space character (namely, HTAB (U+0009) or SPACE
- (U+0020)) as equivalent to no characters at all (i.e., the CRLF and
- single white space character are removed).
-
- Note: It is possible for very simple implementations to generate
- improperly folded lines in the middle of a UTF-8 multi-octet
- sequence. For this reason, implementations SHOULD unfold lines in
- such a way as to properly restore the original sequence.
-
- Note: Unfolding is done differently than in [RFC5322]. Unfolding
- in [RFC5322] only removes the CRLF, not the space following it.
-
- Folding is done after any content encoding of a type value.
- Unfolding is done before any decoding of a type value in a content
- line.
-
-3.3. ABNF Format Definition
-
- The following ABNF uses the notation of [RFC5234], which also defines
- CRLF, WSP, DQUOTE, VCHAR, ALPHA, and DIGIT.
-
- vcard-entity = 1*vcard
-
- vcard = "BEGIN:VCARD" CRLF
- "VERSION:4.0" CRLF
- 1*contentline
- "END:VCARD" CRLF
- ; A vCard object MUST include the VERSION and FN properties.
- ; VERSION MUST come immediately after BEGIN:VCARD.
-
-
-
-Perreault Standards Track [Page 6]
-
-RFC 6350 vCard August 2011
-
-
- contentline = [group "."] name *(";" param) ":" value CRLF
- ; When parsing a content line, folded lines must first
- ; be unfolded according to the unfolding procedure
- ; described in Section 3.2.
- ; When generating a content line, lines longer than 75
- ; characters SHOULD be folded according to the folding
- ; procedure described in Section 3.2.
-
- group = 1*(ALPHA / DIGIT / "-")
- name = "SOURCE" / "KIND" / "FN" / "N" / "NICKNAME"
- / "PHOTO" / "BDAY" / "ANNIVERSARY" / "GENDER" / "ADR" / "TEL"
- / "EMAIL" / "IMPP" / "LANG" / "TZ" / "GEO" / "TITLE" / "ROLE"
- / "LOGO" / "ORG" / "MEMBER" / "RELATED" / "CATEGORIES"
- / "NOTE" / "PRODID" / "REV" / "SOUND" / "UID" / "CLIENTPIDMAP"
- / "URL" / "KEY" / "FBURL" / "CALADRURI" / "CALURI" / "XML"
- / iana-token / x-name
- ; Parsing of the param and value is based on the "name" as
- ; defined in ABNF sections below.
- ; Group and name are case-insensitive.
-
- iana-token = 1*(ALPHA / DIGIT / "-")
- ; identifier registered with IANA
-
- x-name = "x-" 1*(ALPHA / DIGIT / "-")
- ; Names that begin with "x-" or "X-" are
- ; reserved for experimental use, not intended for released
- ; products, or for use in bilateral agreements.
-
- param = language-param / value-param / pref-param / pid-param
- / type-param / geo-parameter / tz-parameter / sort-as-param
- / calscale-param / any-param
- ; Allowed parameters depend on property name.
-
- param-value = *SAFE-CHAR / DQUOTE *QSAFE-CHAR DQUOTE
-
- any-param = (iana-token / x-name) "=" param-value *("," param-value)
-
- NON-ASCII = UTF8-2 / UTF8-3 / UTF8-4
- ; UTF8-{2,3,4} are defined in [RFC3629]
-
- QSAFE-CHAR = WSP / "!" / %x23-7E / NON-ASCII
- ; Any character except CTLs, DQUOTE
-
- SAFE-CHAR = WSP / "!" / %x23-39 / %x3C-7E / NON-ASCII
- ; Any character except CTLs, DQUOTE, ";", ":"
-
- VALUE-CHAR = WSP / VCHAR / NON-ASCII
- ; Any textual character
-
-
-
-Perreault Standards Track [Page 7]
-
-RFC 6350 vCard August 2011
-
-
- A line that begins with a white space character is a continuation of
- the previous line, as described in Section 3.2. The white space
- character and immediately preceeding CRLF should be discarded when
- reconstructing the original line. Note that this line-folding
- convention differs from that found in [RFC5322], in that the sequence
- found anywhere in the content indicates a continued line
- and should be removed.
-
- Property names and parameter names are case-insensitive (e.g., the
- property name "fn" is the same as "FN" and "Fn"). Parameter values
- MAY be case-sensitive or case-insensitive, depending on their
- definition. Parameter values that are not explicitly defined as
- being case-sensitive are case-insensitive. Based on experience with
- vCard 3 interoperability, it is RECOMMENDED that property and
- parameter names be upper-case on output.
-
- The group construct is used to group related properties together.
- The group name is a syntactic convention used to indicate that all
- property names prefaced with the same group name SHOULD be grouped
- together when displayed by an application. It has no other
- significance. Implementations that do not understand or support
- grouping MAY simply strip off any text before a "." to the left of
- the type name and present the types and values as normal.
-
- Property cardinalities are indicated using the following notation,
- which is based on ABNF (see [RFC5234], Section 3.6):
-
- +-------------+--------------------------------------------------+
- | Cardinality | Meaning |
- +-------------+--------------------------------------------------+
- | 1 | Exactly one instance per vCard MUST be present. |
- | *1 | Exactly one instance per vCard MAY be present. |
- | 1* | One or more instances per vCard MUST be present. |
- | * | One or more instances per vCard MAY be present. |
- +-------------+--------------------------------------------------+
-
- Properties defined in a vCard instance may have multiple values
- depending on the property cardinality. The general rule for encoding
- multi-valued properties is to simply create a new content line for
- each value (including the property name). However, it should be
- noted that some value types support encoding multiple values in a
- single content line by separating the values with a comma ",". This
- approach has been taken for several of the content types defined
- below (date, time, integer, float).
-
-
-
-
-
-
-
-Perreault Standards Track [Page 8]
-
-RFC 6350 vCard August 2011
-
-
-3.4. Property Value Escaping
-
- Some properties may contain one or more values delimited by a COMMA
- character (U+002C). Therefore, a COMMA character in a value MUST be
- escaped with a BACKSLASH character (U+005C), even for properties that
- don't allow multiple instances (for consistency).
-
- Some properties (e.g., N and ADR) comprise multiple fields delimited
- by a SEMICOLON character (U+003B). Therefore, a SEMICOLON in a field
- of such a "compound" property MUST be escaped with a BACKSLASH
- character. SEMICOLON characters in non-compound properties MAY be
- escaped. On input, an escaped SEMICOLON character is never a field
- separator. An unescaped SEMICOLON character may be a field
- separator, depending on the property in which it appears.
-
- Furthermore, some fields of compound properties may contain a list of
- values delimited by a COMMA character. Therefore, a COMMA character
- in one of a field's values MUST be escaped with a BACKSLASH
- character, even for fields that don't allow multiple values (for
- consistency). Compound properties allowing multiple instances MUST
- NOT be encoded in a single content line.
-
- Finally, BACKSLASH characters in values MUST be escaped with a
- BACKSLASH character. NEWLINE (U+000A) characters in values MUST be
- encoded by two characters: a BACKSLASH followed by either an 'n'
- (U+006E) or an 'N' (U+004E).
-
- In all other cases, escaping MUST NOT be used.
-
-4. Property Value Data Types
-
- Standard value types are defined below.
-
- value = text
- / text-list
- / date-list
- / time-list
- / date-time-list
- / date-and-or-time-list
- / timestamp-list
- / boolean
- / integer-list
- / float-list
- / URI ; from Section 3 of [RFC3986]
- / utc-offset
- / Language-Tag
- / iana-valuespec
- ; Actual value type depends on property name and VALUE parameter.
-
-
-
-Perreault Standards Track [Page 9]
-
-RFC 6350 vCard August 2011
-
-
- text = *TEXT-CHAR
-
- TEXT-CHAR = "\\" / "\," / "\n" / WSP / NON-ASCII
- / %x21-2B / %x2D-5B / %x5D-7E
- ; Backslashes, commas, and newlines must be encoded.
-
- component = "\\" / "\," / "\;" / "\n" / WSP / NON-ASCII
- / %x21-2B / %x2D-3A / %x3C-5B / %x5D-7E
- list-component = component *("," component)
-
- text-list = text *("," text)
- date-list = date *("," date)
- time-list = time *("," time)
- date-time-list = date-time *("," date-time)
- date-and-or-time-list = date-and-or-time *("," date-and-or-time)
- timestamp-list = timestamp *("," timestamp)
- integer-list = integer *("," integer)
- float-list = float *("," float)
-
- boolean = "TRUE" / "FALSE"
- integer = [sign] 1*DIGIT
- float = [sign] 1*DIGIT ["." 1*DIGIT]
-
- sign = "+" / "-"
-
- year = 4DIGIT ; 0000-9999
- month = 2DIGIT ; 01-12
- day = 2DIGIT ; 01-28/29/30/31 depending on month and leap year
- hour = 2DIGIT ; 00-23
- minute = 2DIGIT ; 00-59
- second = 2DIGIT ; 00-58/59/60 depending on leap second
- zone = utc-designator / utc-offset
- utc-designator = %x5A ; uppercase "Z"
-
- date = year [month day]
- / year "-" month
- / "--" month [day]
- / "--" "-" day
- date-noreduc = year month day
- / "--" month day
- / "--" "-" day
- date-complete = year month day
-
- time = hour [minute [second]] [zone]
- / "-" minute [second] [zone]
- / "-" "-" second [zone]
- time-notrunc = hour [minute [second]] [zone]
- time-complete = hour minute second [zone]
-
-
-
-Perreault Standards Track [Page 10]
-
-RFC 6350 vCard August 2011
-
-
- time-designator = %x54 ; uppercase "T"
- date-time = date-noreduc time-designator time-notrunc
- timestamp = date-complete time-designator time-complete
-
- date-and-or-time = date-time / date / time-designator time
-
- utc-offset = sign hour [minute]
-
- Language-Tag =
-
- iana-valuespec =
- ; a publicly defined valuetype format, registered
- ; with IANA, as defined in Section 12 of this
- ; document.
-
-4.1. TEXT
-
- "text": The "text" value type should be used to identify values that
- contain human-readable text. As for the language, it is controlled
- by the LANGUAGE property parameter defined in Section 5.1.
-
- Examples for "text":
-
- this is a text value
- this is one value,this is another
- this is a single value\, with a comma encoded
-
- A formatted text line break in a text value type MUST be represented
- as the character sequence backslash (U+005C) followed by a Latin
- small letter n (U+006E) or a Latin capital letter N (U+004E), that
- is, "\n" or "\N".
-
- For example, a multiple line NOTE value of:
-
- Mythical Manager
- Hyjinx Software Division
- BabsCo, Inc.
-
- could be represented as:
-
- NOTE:Mythical Manager\nHyjinx Software Division\n
- BabsCo\, Inc.\n
-
- demonstrating the \n literal formatted line break technique, the
- CRLF-followed-by-space line folding technique, and the backslash
- escape technique.
-
-
-
-
-
-Perreault Standards Track [Page 11]
-
-RFC 6350 vCard August 2011
-
-
-4.2. URI
-
- "uri": The "uri" value type should be used to identify values that
- are referenced by a Uniform Resource Identifier (URI) instead of
- encoded in-line. These value references might be used if the value
- is too large, or otherwise undesirable to include directly. The
- format for the URI is as defined in Section 3 of [RFC3986]. Note
- that the value of a property of type "uri" is what the URI points to,
- not the URI itself.
-
- Examples for "uri":
-
- http://www.example.com/my/picture.jpg
- ldap://ldap.example.com/cn=babs%20jensen
-
-4.3. DATE, TIME, DATE-TIME, DATE-AND-OR-TIME, and TIMESTAMP
-
- "date", "time", "date-time", "date-and-or-time", and "timestamp":
- Each of these value types is based on the definitions in
- [ISO.8601.2004]. Multiple such values can be specified using the
- comma-separated notation.
-
- Only the basic format is supported.
-
-4.3.1. DATE
-
- A calendar date as specified in [ISO.8601.2004], Section 4.1.2.
-
- Reduced accuracy, as specified in [ISO.8601.2004], Sections 4.1.2.3
- a) and b), but not c), is permitted.
-
- Expanded representation, as specified in [ISO.8601.2004], Section
- 4.1.4, is forbidden.
-
- Truncated representation, as specified in [ISO.8601.2000], Sections
- 5.2.1.3 d), e), and f), is permitted.
-
- Examples for "date":
-
- 19850412
- 1985-04
- 1985
- --0412
- ---12
-
-
-
-
-
-
-
-Perreault Standards Track [Page 12]
-
-RFC 6350 vCard August 2011
-
-
- Note the use of YYYY-MM in the second example above. YYYYMM is
- disallowed to prevent confusion with YYMMDD. Note also that
- YYYY-MM-DD is disallowed since we are using the basic format instead
- of the extended format.
-
-4.3.2. TIME
-
- A time of day as specified in [ISO.8601.2004], Section 4.2.
-
- Reduced accuracy, as specified in [ISO.8601.2004], Section 4.2.2.3,
- is permitted.
-
- Representation with decimal fraction, as specified in
- [ISO.8601.2004], Section 4.2.2.4, is forbidden.
-
- The midnight hour is always represented by 00, never 24 (see
- [ISO.8601.2004], Section 4.2.3).
-
- Truncated representation, as specified in [ISO.8601.2000], Sections
- 5.3.1.4 a), b), and c), is permitted.
-
- Examples for "time":
-
- 102200
- 1022
- 10
- -2200
- --00
- 102200Z
- 102200-0800
-
-4.3.3. DATE-TIME
-
- A date and time of day combination as specified in [ISO.8601.2004],
- Section 4.3.
-
- Truncation of the date part, as specified in [ISO.8601.2000], Section
- 5.4.2 c), is permitted.
-
- Examples for "date-time":
-
- 19961022T140000
- --1022T1400
- ---22T14
-
-
-
-
-
-
-
-Perreault Standards Track [Page 13]
-
-RFC 6350 vCard August 2011
-
-
-4.3.4. DATE-AND-OR-TIME
-
- Either a DATE-TIME, a DATE, or a TIME value. To allow unambiguous
- interpretation, a stand-alone TIME value is always preceded by a "T".
-
- Examples for "date-and-or-time":
-
- 19961022T140000
- --1022T1400
- ---22T14
- 19850412
- 1985-04
- 1985
- --0412
- ---12
- T102200
- T1022
- T10
- T-2200
- T--00
- T102200Z
- T102200-0800
-
-4.3.5. TIMESTAMP
-
- A complete date and time of day combination as specified in
- [ISO.8601.2004], Section 4.3.2.
-
- Examples for "timestamp":
-
- 19961022T140000
- 19961022T140000Z
- 19961022T140000-05
- 19961022T140000-0500
-
-4.4. BOOLEAN
-
- "boolean": The "boolean" value type is used to express boolean
- values. These values are case-insensitive.
-
- Examples:
-
- TRUE
- false
- True
-
-
-
-
-
-
-Perreault Standards Track [Page 14]
-
-RFC 6350 vCard August 2011
-
-
-4.5. INTEGER
-
- "integer": The "integer" value type is used to express signed
- integers in decimal format. If sign is not specified, the value is
- assumed positive "+". Multiple "integer" values can be specified
- using the comma-separated notation. The maximum value is
- 9223372036854775807, and the minimum value is -9223372036854775808.
- These limits correspond to a signed 64-bit integer using two's-
- complement arithmetic.
-
- Examples:
-
- 1234567890
- -1234556790
- +1234556790,432109876
-
-4.6. FLOAT
-
- "float": The "float" value type is used to express real numbers. If
- sign is not specified, the value is assumed positive "+". Multiple
- "float" values can be specified using the comma-separated notation.
- Implementations MUST support a precision equal or better than that of
- the IEEE "binary64" format [IEEE.754.2008].
-
- Note: Scientific notation is disallowed. Implementers wishing to
- use their favorite language's %f formatting should be careful.
-
- Examples:
-
- 20.30
- 1000000.0000001
- 1.333,3.14
-
-4.7. UTC-OFFSET
-
- "utc-offset": The "utc-offset" value type specifies that the property
- value is a signed offset from UTC. This value type can be specified
- in the TZ property.
-
- The value type is an offset from Coordinated Universal Time (UTC).
- It is specified as a positive or negative difference in units of
- hours and minutes (e.g., +hhmm). The time is specified as a 24-hour
- clock. Hour values are from 00 to 23, and minute values are from 00
- to 59. Hour and minutes are 2 digits with high-order zeroes required
- to maintain digit count. The basic format for ISO 8601 UTC offsets
- MUST be used.
-
-
-
-
-
-Perreault Standards Track [Page 15]
-
-RFC 6350 vCard August 2011
-
-
-4.8. LANGUAGE-TAG
-
- "language-tag": A single language tag, as defined in [RFC5646].
-
-5. Property Parameters
-
- A property can have attributes associated with it. These "property
- parameters" contain meta-information about the property or the
- property value. In some cases, the property parameter can be multi-
- valued in which case the property parameter value elements are
- separated by a COMMA (U+002C).
-
- Property parameter value elements that contain the COLON (U+003A),
- SEMICOLON (U+003B), or COMMA (U+002C) character separators MUST be
- specified as quoted-string text values. Property parameter values
- MUST NOT contain the DQUOTE (U+0022) character. The DQUOTE character
- is used as a delimiter for parameter values that contain restricted
- characters or URI text.
-
- Applications MUST ignore x-param and iana-param values they don't
- recognize.
-
-5.1. LANGUAGE
-
- The LANGUAGE property parameter is used to identify data in multiple
- languages. There is no concept of "default" language, except as
- specified by any "Content-Language" MIME header parameter that is
- present [RFC3282]. The value of the LANGUAGE property parameter is a
- language tag as defined in Section 2 of [RFC5646].
-
- Examples:
-
- ROLE;LANGUAGE=tr:hoca
-
- ABNF:
-
- language-param = "LANGUAGE=" Language-Tag
- ; Language-Tag is defined in section 2.1 of RFC 5646
-
-5.2. VALUE
-
- The VALUE parameter is OPTIONAL, used to identify the value type
- (data type) and format of the value. The use of these predefined
- formats is encouraged even if the value parameter is not explicitly
- used. By defining a standard set of value types and their formats,
- existing parsing and processing code can be leveraged. The
-
-
-
-
-
-Perreault Standards Track [Page 16]
-
-RFC 6350 vCard August 2011
-
-
- predefined data type values MUST NOT be repeated in COMMA-separated
- value lists except within the N, NICKNAME, ADR, and CATEGORIES
- properties.
-
- ABNF:
-
- value-param = "VALUE=" value-type
-
- value-type = "text"
- / "uri"
- / "date"
- / "time"
- / "date-time"
- / "date-and-or-time"
- / "timestamp"
- / "boolean"
- / "integer"
- / "float"
- / "utc-offset"
- / "language-tag"
- / iana-token ; registered as described in section 12
- / x-name
-
-5.3. PREF
-
- The PREF parameter is OPTIONAL and is used to indicate that the
- corresponding instance of a property is preferred by the vCard
- author. Its value MUST be an integer between 1 and 100 that
- quantifies the level of preference. Lower values correspond to a
- higher level of preference, with 1 being most preferred.
-
- When the parameter is absent, the default MUST be to interpret the
- property instance as being least preferred.
-
- Note that the value of this parameter is to be interpreted only in
- relation to values assigned to other instances of the same property
- in the same vCard. A given value, or the absence of a value, MUST
- NOT be interpreted on its own.
-
- This parameter MAY be applied to any property that allows multiple
- instances.
-
- ABNF:
-
- pref-param = "PREF=" (1*2DIGIT / "100")
- ; An integer between 1 and 100.
-
-
-
-
-
-Perreault Standards Track [Page 17]
-
-RFC 6350 vCard August 2011
-
-
-5.4. ALTID
-
- The ALTID parameter is used to "tag" property instances as being
- alternative representations of the same logical property. For
- example, translations of a property in multiple languages generates
- multiple property instances having different LANGUAGE (Section 5.1)
- parameter that are tagged with the same ALTID value.
-
- This parameter's value is treated as an opaque string. Its sole
- purpose is to be compared for equality against other ALTID parameter
- values.
-
- Two property instances are considered alternative representations of
- the same logical property if and only if their names as well as the
- value of their ALTID parameters are identical. Property instances
- without the ALTID parameter MUST NOT be considered an alternative
- representation of any other property instance. Values for the ALTID
- parameter are not globally unique: they MAY be reused for different
- property names.
-
- Property instances having the same ALTID parameter value count as 1
- toward cardinality. Therefore, since N (Section 6.2.2) has
- cardinality *1 and TITLE (Section 6.6.1) has cardinality *, these
- three examples would be legal:
-
- N;ALTID=1;LANGUAGE=jp:;;;;
- N;ALTID=1;LANGUAGE=en:Yamada;Taro;;;
- ( denotes a UTF8-encoded Unicode character.)
-
- TITLE;ALTID=1;LANGUAGE=fr:Patron
- TITLE;ALTID=1;LANGUAGE=en:Boss
-
- TITLE;ALTID=1;LANGUAGE=fr:Patron
- TITLE;ALTID=1;LANGUAGE=en:Boss
- TITLE;ALTID=2;LANGUAGE=en:Chief vCard Evangelist
-
- while this one would not:
-
- N;ALTID=1;LANGUAGE=jp:;;;;
- N:Yamada;Taro;;;
- (Two instances of the N property.)
-
- and these three would be legal but questionable:
-
- TITLE;ALTID=1;LANGUAGE=fr:Patron
- TITLE;ALTID=2;LANGUAGE=en:Boss
- (Should probably have the same ALTID value.)
-
-
-
-
-Perreault Standards Track [Page 18]
-
-RFC 6350 vCard August 2011
-
-
- TITLE;ALTID=1;LANGUAGE=fr:Patron
- TITLE:LANGUAGE=en:Boss
- (Second line should probably have ALTID=1.)
-
- N;ALTID=1;LANGUAGE=jp:;;;;
- N;ALTID=1;LANGUAGE=en:Yamada;Taro;;;
- N;ALTID=1;LANGUAGE=en:Smith;John;;;
- (The last line should probably have ALTID=2. But that would be
- illegal because N has cardinality *1.)
-
- The ALTID property MAY also be used in may contexts other than with
- the LANGUAGE parameter. Here's an example with two representations
- of the same photo in different file formats:
-
- PHOTO;ALTID=1:data:image/jpeg;base64,...
- PHOTO;ALTID=1;data:image/jp2;base64,...
-
- ABNF:
-
- altid-param = "ALTID=" param-value
-
-5.5. PID
-
- The PID parameter is used to identify a specific property among
- multiple instances. It plays a role analogous to the UID property
- (Section 6.7.6) on a per-property instead of per-vCard basis. It MAY
- appear more than once in a given property. It MUST NOT appear on
- properties that may have only one instance per vCard. Its value is
- either a single small positive integer or a pair of small positive
- integers separated by a dot. Multiple values may be encoded in a
- single PID parameter by separating the values with a comma ",". See
- Section 7 for more details on its usage.
-
- ABNF:
-
- pid-param = "PID=" pid-value *("," pid-value)
- pid-value = 1*DIGIT ["." 1*DIGIT]
-
-5.6. TYPE
-
- The TYPE parameter has multiple, different uses. In general, it is a
- way of specifying class characteristics of the associated property.
- Most of the time, its value is a comma-separated subset of a
- predefined enumeration. In this document, the following properties
- make use of this parameter: FN, NICKNAME, PHOTO, ADR, TEL, EMAIL,
- IMPP, LANG, TZ, GEO, TITLE, ROLE, LOGO, ORG, RELATED, CATEGORIES,
-
-
-
-
-
-Perreault Standards Track [Page 19]
-
-RFC 6350 vCard August 2011
-
-
- NOTE, SOUND, URL, KEY, FBURL, CALADRURI, and CALURI. The TYPE
- parameter MUST NOT be applied on other properties defined in this
- document.
-
- The "work" and "home" values act like tags. The "work" value implies
- that the property is related to an individual's work place, while the
- "home" value implies that the property is related to an individual's
- personal life. When neither "work" nor "home" is present, it is
- implied that the property is related to both an individual's work
- place and personal life in the case that the KIND property's value is
- "individual", or to none in other cases.
-
- ABNF:
-
- type-param = "TYPE=" type-value *("," type-value)
-
- type-value = "work" / "home" / type-param-tel
- / type-param-related / iana-token / x-name
- ; This is further defined in individual property sections.
-
-5.7. MEDIATYPE
-
- The MEDIATYPE parameter is used with properties whose value is a URI.
- Its use is OPTIONAL. It provides a hint to the vCard consumer
- application about the media type [RFC2046] of the resource identified
- by the URI. Some URI schemes do not need this parameter. For
- example, the "data" scheme allows the media type to be explicitly
- indicated as part of the URI [RFC2397]. Another scheme, "http",
- provides the media type as part of the URI resolution process, with
- the Content-Type HTTP header [RFC2616]. The MEDIATYPE parameter is
- intended to be used with URI schemes that do not provide such
- functionality (e.g., "ftp" [RFC1738]).
-
- ABNF:
-
- mediatype-param = "MEDIATYPE=" mediatype
- mediatype = type-name "/" subtype-name *( ";" attribute "=" value )
- ; "attribute" and "value" are from [RFC2045]
- ; "type-name" and "subtype-name" are from [RFC4288]
-
-5.8. CALSCALE
-
- The CALSCALE parameter is identical to the CALSCALE property in
- iCalendar (see [RFC5545], Section 3.7.1). It is used to define the
- calendar system in which a date or date-time value is expressed. The
- only value specified by iCalendar is "gregorian", which stands for
- the Gregorian system. It is the default when the parameter is
- absent. Additional values may be defined in extension documents and
-
-
-
-Perreault Standards Track [Page 20]
-
-RFC 6350 vCard August 2011
-
-
- registered with IANA (see Section 10.3.4). A vCard implementation
- MUST ignore properties with a CALSCALE parameter value that it does
- not understand.
-
- ABNF:
-
- calscale-param = "CALSCALE=" calscale-value
-
- calscale-value = "gregorian" / iana-token / x-name
-
-5.9. SORT-AS
-
- The "sort-as" parameter is used to specify the string to be used for
- national-language-specific sorting. Without this information,
- sorting algorithms could incorrectly sort this vCard within a
- sequence of sorted vCards. When this property is present in a vCard,
- then the given strings are used for sorting the vCard.
-
- This parameter's value is a comma-separated list that MUST have as
- many or fewer elements as the corresponding property value has
- components. This parameter's value is case-sensitive.
-
- ABNF:
-
- sort-as-param = "SORT-AS=" sort-as-value
-
- sort-as-value = param-value *("," param-value)
-
- Examples: For the case of surname and given name sorting, the
- following examples define common sort string usage with the N
- property.
-
- FN:Rene van der Harten
- N;SORT-AS="Harten,Rene":van der Harten;Rene,J.;Sir;R.D.O.N.
-
- FN:Robert Pau Shou Chang
- N;SORT-AS="Pau Shou Chang,Robert":Shou Chang;Robert,Pau;;
-
- FN:Osamu Koura
- N;SORT-AS="Koura,Osamu":Koura;Osamu;;
-
- FN:Oscar del Pozo
- N;SORT-AS="Pozo,Oscar":del Pozo Triscon;Oscar;;
-
- FN:Chistine d'Aboville
- N;SORT-AS="Aboville,Christine":d'Aboville;Christine;;
-
-
-
-
-
-Perreault Standards Track [Page 21]
-
-RFC 6350 vCard August 2011
-
-
- FN:H. James de Mann
- N;SORT-AS="Mann,James":de Mann;Henry,James;;
-
- If sorted by surname, the results would be:
-
- Christine d'Aboville
- Rene van der Harten
- Osamu Koura
- H. James de Mann
- Robert Pau Shou Chang
- Oscar del Pozo
-
- If sorted by given name, the results would be:
-
- Christine d'Aboville
- H. James de Mann
- Osamu Koura
- Oscar del Pozo
- Rene van der Harten
- Robert Pau Shou Chang
-
-5.10. GEO
-
- The GEO parameter can be used to indicate global positioning
- information that is specific to an address. Its value is the same as
- that of the GEO property (see Section 6.5.2).
-
- ABNF:
-
- geo-parameter = "GEO=" DQUOTE URI DQUOTE
-
-5.11. TZ
-
- The TZ parameter can be used to indicate time zone information that
- is specific to an address. Its value is the same as that of the TZ
- property.
-
- ABNF:
-
- tz-parameter = "TZ=" (param-value / DQUOTE URI DQUOTE)
-
-
-
-
-
-
-
-
-
-
-
-Perreault Standards Track [Page 22]
-
-RFC 6350 vCard August 2011
-
-
-6. vCard Properties
-
- What follows is an enumeration of the standard vCard properties.
-
-6.1. General Properties
-
-6.1.1. BEGIN
-
- Purpose: To denote the beginning of a syntactic entity within a
- text/vcard content-type.
-
- Value type: text
-
- Cardinality: 1
-
- Special notes: The content entity MUST begin with the BEGIN property
- with a value of "VCARD". The value is case-insensitive.
-
- The BEGIN property is used in conjunction with the END property to
- delimit an entity containing a related set of properties within a
- text/vcard content-type. This construct can be used instead of
- including multiple vCards as body parts inside of a multipart/
- alternative MIME message. It is provided for applications that
- wish to define content that can contain multiple entities within
- the same text/vcard content-type or to define content that can be
- identifiable outside of a MIME environment.
-
- ABNF:
-
- BEGIN-param = 0" " ; no parameter allowed
- BEGIN-value = "VCARD"
-
- Example:
-
- BEGIN:VCARD
-
-6.1.2. END
-
- Purpose: To denote the end of a syntactic entity within a text/vcard
- content-type.
-
- Value type: text
-
- Cardinality: 1
-
- Special notes: The content entity MUST end with the END type with a
- value of "VCARD". The value is case-insensitive.
-
-
-
-
-Perreault Standards Track [Page 23]
-
-RFC 6350 vCard August 2011
-
-
- The END property is used in conjunction with the BEGIN property to
- delimit an entity containing a related set of properties within a
- text/vcard content-type. This construct can be used instead of or
- in addition to wrapping separate sets of information inside
- additional MIME headers. It is provided for applications that
- wish to define content that can contain multiple entities within
- the same text/vcard content-type or to define content that can be
- identifiable outside of a MIME environment.
-
- ABNF:
-
- END-param = 0" " ; no parameter allowed
- END-value = "VCARD"
-
- Example:
-
- END:VCARD
-
-6.1.3. SOURCE
-
- Purpose: To identify the source of directory information contained
- in the content type.
-
- Value type: uri
-
- Cardinality: *
-
- Special notes: The SOURCE property is used to provide the means by
- which applications knowledgable in the given directory service
- protocol can obtain additional or more up-to-date information from
- the directory service. It contains a URI as defined in [RFC3986]
- and/or other information referencing the vCard to which the
- information pertains. When directory information is available
- from more than one source, the sending entity can pick what it
- considers to be the best source, or multiple SOURCE properties can
- be included.
-
- ABNF:
-
- SOURCE-param = "VALUE=uri" / pid-param / pref-param / altid-param
- / mediatype-param / any-param
- SOURCE-value = URI
-
- Examples:
-
- SOURCE:ldap://ldap.example.com/cn=Babs%20Jensen,%20o=Babsco,%20c=US
-
-
-
-
-
-Perreault Standards Track [Page 24]
-
-RFC 6350 vCard August 2011
-
-
- SOURCE:http://directory.example.com/addressbooks/jdoe/
- Jean%20Dupont.vcf
-
-6.1.4. KIND
-
- Purpose: To specify the kind of object the vCard represents.
-
- Value type: A single text value.
-
- Cardinality: *1
-
- Special notes: The value may be one of the following:
-
- "individual" for a vCard representing a single person or entity.
- This is the default kind of vCard.
-
- "group" for a vCard representing a group of persons or entities.
- The group's member entities can be other vCards or other types
- of entities, such as email addresses or web sites. A group
- vCard will usually contain MEMBER properties to specify the
- members of the group, but it is not required to. A group vCard
- without MEMBER properties can be considered an abstract
- grouping, or one whose members are known empirically (perhaps
- "IETF Participants" or "Republican U.S. Senators").
-
- All properties in a group vCard apply to the group as a whole,
- and not to any particular MEMBER. For example, an EMAIL
- property might specify the address of a mailing list associated
- with the group, and an IMPP property might refer to a group
- chat room.
-
- "org" for a vCard representing an organization. An organization
- vCard will not (in fact, MUST NOT) contain MEMBER properties,
- and so these are something of a cross between "individual" and
- "group". An organization is a single entity, but not a person.
- It might represent a business or government, a department or
- division within a business or government, a club, an
- association, or the like.
-
- All properties in an organization vCard apply to the
- organization as a whole, as is the case with a group vCard.
- For example, an EMAIL property might specify the address of a
- contact point for the organization.
-
-
-
-
-
-
-
-
-Perreault Standards Track [Page 25]
-
-RFC 6350 vCard August 2011
-
-
- "location" for a named geographical place. A location vCard will
- usually contain a GEO property, but it is not required to. A
- location vCard without a GEO property can be considered an
- abstract location, or one whose definition is known empirically
- (perhaps "New England" or "The Seashore").
-
- All properties in a location vCard apply to the location
- itself, and not with any entity that might exist at that
- location. For example, in a vCard for an office building, an
- ADR property might give the mailing address for the building,
- and a TEL property might specify the telephone number of the
- receptionist.
-
- An x-name. vCards MAY include private or experimental values for
- KIND. Remember that x-name values are not intended for general
- use and are unlikely to interoperate.
-
- An iana-token. Additional values may be registered with IANA (see
- Section 10.3.4). A new value's specification document MUST
- specify which properties make sense for that new kind of vCard
- and which do not.
-
- Implementations MUST support the specific string values defined
- above. If this property is absent, "individual" MUST be assumed
- as the default. If this property is present but the
- implementation does not understand its value (the value is an
- x-name or iana-token that the implementation does not support),
- the implementation SHOULD act in a neutral way, which usually
- means treating the vCard as though its kind were "individual".
- The presence of MEMBER properties MAY, however, be taken as an
- indication that the unknown kind is an extension of "group".
-
- Clients often need to visually distinguish contacts based on what
- they represent, and the KIND property provides a direct way for
- them to do so. For example, when displaying contacts in a list,
- an icon could be displayed next to each one, using distinctive
- icons for the different kinds; a client might use an outline of a
- single person to represent an "individual", an outline of multiple
- people to represent a "group", and so on. Alternatively, or in
- addition, a client might choose to segregate different kinds of
- vCards to different panes, tabs, or selections in the user
- interface.
-
- Some clients might also make functional distinctions among the
- kinds, ignoring "location" vCards for some purposes and
- considering only "location" vCards for others.
-
-
-
-
-
-Perreault Standards Track [Page 26]
-
-RFC 6350 vCard August 2011
-
-
- When designing those sorts of visual and functional distinctions,
- client implementations have to decide how to fit unsupported kinds
- into the scheme. What icon is used for them? The one for
- "individual"? A unique one, such as an icon of a question mark?
- Which tab do they go into? It is beyond the scope of this
- specification to answer these questions, but these are things
- implementers need to consider.
-
- ABNF:
-
- KIND-param = "VALUE=text" / any-param
- KIND-value = "individual" / "group" / "org" / "location"
- / iana-token / x-name
-
- Example:
-
- This represents someone named Jane Doe working in the marketing
- department of the North American division of ABC Inc.
-
- BEGIN:VCARD
- VERSION:4.0
- KIND:individual
- FN:Jane Doe
- ORG:ABC\, Inc.;North American Division;Marketing
- END:VCARD
-
- This represents the department itself, commonly known as ABC
- Marketing.
-
- BEGIN:VCARD
- VERSION:4.0
- KIND:org
- FN:ABC Marketing
- ORG:ABC\, Inc.;North American Division;Marketing
- END:VCARD
-
-6.1.5. XML
-
- Purpose: To include extended XML-encoded vCard data in a plain
- vCard.
-
- Value type: A single text value.
-
- Cardinality: *
-
- Special notes: The content of this property is a single XML 1.0
- [W3C.REC-xml-20081126] element whose namespace MUST be explicitly
- specified using the xmlns attribute and MUST NOT be the vCard 4
-
-
-
-Perreault Standards Track [Page 27]
-
-RFC 6350 vCard August 2011
-
-
- namespace ("urn:ietf:params:xml:ns:vcard-4.0"). (This implies
- that it cannot duplicate a standard vCard property.) The element
- is to be interpreted as if it was contained in a element,
- as defined in [RFC6351].
-
- The fragment is subject to normal line folding and escaping, i.e.,
- replace all backslashes with "\\", then replace all newlines with
- "\n", then fold long lines.
-
- Support for this property is OPTIONAL, but implementations of this
- specification MUST preserve instances of this property when
- propagating vCards.
-
- See [RFC6351] for more information on the intended use of this
- property.
-
- ABNF:
-
- XML-param = "VALUE=text" / altid-param
- XML-value = text
-
-6.2. Identification Properties
-
- These types are used to capture information associated with the
- identification and naming of the entity associated with the vCard.
-
-6.2.1. FN
-
- Purpose: To specify the formatted text corresponding to the name of
- the object the vCard represents.
-
- Value type: A single text value.
-
- Cardinality: 1*
-
- Special notes: This property is based on the semantics of the X.520
- Common Name attribute [CCITT.X520.1988]. The property MUST be
- present in the vCard object.
-
- ABNF:
-
- FN-param = "VALUE=text" / type-param / language-param / altid-param
- / pid-param / pref-param / any-param
- FN-value = text
-
- Example:
-
- FN:Mr. John Q. Public\, Esq.
-
-
-
-Perreault Standards Track [Page 28]
-
-RFC 6350 vCard August 2011
-
-
-6.2.2. N
-
- Purpose: To specify the components of the name of the object the
- vCard represents.
-
- Value type: A single structured text value. Each component can have
- multiple values.
-
- Cardinality: *1
-
- Special note: The structured property value corresponds, in
- sequence, to the Family Names (also known as surnames), Given
- Names, Additional Names, Honorific Prefixes, and Honorific
- Suffixes. The text components are separated by the SEMICOLON
- character (U+003B). Individual text components can include
- multiple text values separated by the COMMA character (U+002C).
- This property is based on the semantics of the X.520 individual
- name attributes [CCITT.X520.1988]. The property SHOULD be present
- in the vCard object when the name of the object the vCard
- represents follows the X.520 model.
-
- The SORT-AS parameter MAY be applied to this property.
-
- ABNF:
-
- N-param = "VALUE=text" / sort-as-param / language-param
- / altid-param / any-param
- N-value = list-component 4(";" list-component)
-
- Examples:
-
- N:Public;John;Quinlan;Mr.;Esq.
-
- N:Stevenson;John;Philip,Paul;Dr.;Jr.,M.D.,A.C.P.
-
-6.2.3. NICKNAME
-
- Purpose: To specify the text corresponding to the nickname of the
- object the vCard represents.
-
- Value type: One or more text values separated by a COMMA character
- (U+002C).
-
- Cardinality: *
-
-
-
-
-
-
-
-Perreault Standards Track [Page 29]
-
-RFC 6350 vCard August 2011
-
-
- Special note: The nickname is the descriptive name given instead of
- or in addition to the one belonging to the object the vCard
- represents. It can also be used to specify a familiar form of a
- proper name specified by the FN or N properties.
-
- ABNF:
-
- NICKNAME-param = "VALUE=text" / type-param / language-param
- / altid-param / pid-param / pref-param / any-param
- NICKNAME-value = text-list
-
- Examples:
-
- NICKNAME:Robbie
-
- NICKNAME:Jim,Jimmie
-
- NICKNAME;TYPE=work:Boss
-
-6.2.4. PHOTO
-
- Purpose: To specify an image or photograph information that
- annotates some aspect of the object the vCard represents.
-
- Value type: A single URI.
-
- Cardinality: *
-
- ABNF:
-
- PHOTO-param = "VALUE=uri" / altid-param / type-param
- / mediatype-param / pref-param / pid-param / any-param
- PHOTO-value = URI
-
- Examples:
-
- PHOTO:http://www.example.com/pub/photos/jqpublic.gif
-
- PHOTO:data:image/jpeg;base64,MIICajCCAdOgAwIBAgICBEUwDQYJKoZIhv
- AQEEBQAwdzELMAkGA1UEBhMCVVMxLDAqBgNVBAoTI05ldHNjYXBlIENvbW11bm
- ljYXRpb25zIENvcnBvcmF0aW9uMRwwGgYDVQQLExNJbmZvcm1hdGlvbiBTeXN0
- <...remainder of base64-encoded data...>
-
-6.2.5. BDAY
-
- Purpose: To specify the birth date of the object the vCard
- represents.
-
-
-
-
-Perreault Standards Track [Page 30]
-
-RFC 6350 vCard August 2011
-
-
- Value type: The default is a single date-and-or-time value. It can
- also be reset to a single text value.
-
- Cardinality: *1
-
- ABNF:
-
- BDAY-param = BDAY-param-date / BDAY-param-text
- BDAY-value = date-and-or-time / text
- ; Value and parameter MUST match.
-
- BDAY-param-date = "VALUE=date-and-or-time"
- BDAY-param-text = "VALUE=text" / language-param
-
- BDAY-param =/ altid-param / calscale-param / any-param
- ; calscale-param can only be present when BDAY-value is
- ; date-and-or-time and actually contains a date or date-time.
-
- Examples:
-
- BDAY:19960415
- BDAY:--0415
- BDAY;19531015T231000Z
- BDAY;VALUE=text:circa 1800
-
-6.2.6. ANNIVERSARY
-
- Purpose: The date of marriage, or equivalent, of the object the
- vCard represents.
-
- Value type: The default is a single date-and-or-time value. It can
- also be reset to a single text value.
-
- Cardinality: *1
-
- ABNF:
-
- ANNIVERSARY-param = "VALUE=" ("date-and-or-time" / "text")
- ANNIVERSARY-value = date-and-or-time / text
- ; Value and parameter MUST match.
-
- ANNIVERSARY-param =/ altid-param / calscale-param / any-param
- ; calscale-param can only be present when ANNIVERSARY-value is
- ; date-and-or-time and actually contains a date or date-time.
-
- Examples:
-
- ANNIVERSARY:19960415
-
-
-
-Perreault Standards Track [Page 31]
-
-RFC 6350 vCard August 2011
-
-
-6.2.7. GENDER
-
- Purpose: To specify the components of the sex and gender identity of
- the object the vCard represents.
-
- Value type: A single structured value with two components. Each
- component has a single text value.
-
- Cardinality: *1
-
- Special notes: The components correspond, in sequence, to the sex
- (biological), and gender identity. Each component is optional.
-
- Sex component: A single letter. M stands for "male", F stands
- for "female", O stands for "other", N stands for "none or not
- applicable", U stands for "unknown".
-
- Gender identity component: Free-form text.
-
- ABNF:
-
- GENDER-param = "VALUE=text" / any-param
- GENDER-value = sex [";" text]
-
- sex = "" / "M" / "F" / "O" / "N" / "U"
-
- Examples:
-
- GENDER:M
- GENDER:F
- GENDER:M;Fellow
- GENDER:F;grrrl
- GENDER:O;intersex
- GENDER:;it's complicated
-
-6.3. Delivery Addressing Properties
-
- These types are concerned with information related to the delivery
- addressing or label for the vCard object.
-
-6.3.1. ADR
-
- Purpose: To specify the components of the delivery address for the
- vCard object.
-
- Value type: A single structured text value, separated by the
- SEMICOLON character (U+003B).
-
-
-
-
-Perreault Standards Track [Page 32]
-
-RFC 6350 vCard August 2011
-
-
- Cardinality: *
-
- Special notes: The structured type value consists of a sequence of
- address components. The component values MUST be specified in
- their corresponding position. The structured type value
- corresponds, in sequence, to
- the post office box;
- the extended address (e.g., apartment or suite number);
- the street address;
- the locality (e.g., city);
- the region (e.g., state or province);
- the postal code;
- the country name (full name in the language specified in
- Section 5.1).
-
- When a component value is missing, the associated component
- separator MUST still be specified.
-
- Experience with vCard 3 has shown that the first two components
- (post office box and extended address) are plagued with many
- interoperability issues. To ensure maximal interoperability,
- their values SHOULD be empty.
-
- The text components are separated by the SEMICOLON character
- (U+003B). Where it makes semantic sense, individual text
- components can include multiple text values (e.g., a "street"
- component with multiple lines) separated by the COMMA character
- (U+002C).
-
- The property can include the "PREF" parameter to indicate the
- preferred delivery address when more than one address is
- specified.
-
- The GEO and TZ parameters MAY be used with this property.
-
- The property can also include a "LABEL" parameter to present a
- delivery address label for the address. Its value is a plain-text
- string representing the formatted address. Newlines are encoded
- as \n, as they are for property values.
-
- ABNF:
-
- label-param = "LABEL=" param-value
-
- ADR-param = "VALUE=text" / label-param / language-param
- / geo-parameter / tz-parameter / altid-param / pid-param
- / pref-param / type-param / any-param
-
-
-
-
-Perreault Standards Track [Page 33]
-
-RFC 6350 vCard August 2011
-
-
- ADR-value = ADR-component-pobox ";" ADR-component-ext ";"
- ADR-component-street ";" ADR-component-locality ";"
- ADR-component-region ";" ADR-component-code ";"
- ADR-component-country
- ADR-component-pobox = list-component
- ADR-component-ext = list-component
- ADR-component-street = list-component
- ADR-component-locality = list-component
- ADR-component-region = list-component
- ADR-component-code = list-component
- ADR-component-country = list-component
-
- Example: In this example, the post office box and the extended
- address are absent.
-
- ADR;GEO="geo:12.3457,78.910";LABEL="Mr. John Q. Public, Esq.\n
- Mail Drop: TNE QB\n123 Main Street\nAny Town, CA 91921-1234\n
- U.S.A.":;;123 Main Street;Any Town;CA;91921-1234;U.S.A.
-
-6.4. Communications Properties
-
- These properties describe information about how to communicate with
- the object the vCard represents.
-
-6.4.1. TEL
-
- Purpose: To specify the telephone number for telephony communication
- with the object the vCard represents.
-
- Value type: By default, it is a single free-form text value (for
- backward compatibility with vCard 3), but it SHOULD be reset to a
- URI value. It is expected that the URI scheme will be "tel", as
- specified in [RFC3966], but other schemes MAY be used.
-
- Cardinality: *
-
- Special notes: This property is based on the X.520 Telephone Number
- attribute [CCITT.X520.1988].
-
- The property can include the "PREF" parameter to indicate a
- preferred-use telephone number.
-
- The property can include the parameter "TYPE" to specify intended
- use for the telephone number. The predefined values for the TYPE
- parameter are:
-
-
-
-
-
-
-Perreault Standards Track [Page 34]
-
-RFC 6350 vCard August 2011
-
-
- +-----------+-------------------------------------------------------+
- | Value | Description |
- +-----------+-------------------------------------------------------+
- | text | Indicates that the telephone number supports text |
- | | messages (SMS). |
- | voice | Indicates a voice telephone number. |
- | fax | Indicates a facsimile telephone number. |
- | cell | Indicates a cellular or mobile telephone number. |
- | video | Indicates a video conferencing telephone number. |
- | pager | Indicates a paging device telephone number. |
- | textphone | Indicates a telecommunication device for people with |
- | | hearing or speech difficulties. |
- +-----------+-------------------------------------------------------+
-
- The default type is "voice". These type parameter values can be
- specified as a parameter list (e.g., TYPE=text;TYPE=voice) or as a
- value list (e.g., TYPE="text,voice"). The default can be
- overridden to another set of values by specifying one or more
- alternate values. For example, the default TYPE of "voice" can be
- reset to a VOICE and FAX telephone number by the value list
- TYPE="voice,fax".
-
- If this property's value is a URI that can also be used for
- instant messaging, the IMPP (Section 6.4.3) property SHOULD be
- used in addition to this property.
-
- ABNF:
-
- TEL-param = TEL-text-param / TEL-uri-param
- TEL-value = TEL-text-value / TEL-uri-value
- ; Value and parameter MUST match.
-
- TEL-text-param = "VALUE=text"
- TEL-text-value = text
-
- TEL-uri-param = "VALUE=uri" / mediatype-param
- TEL-uri-value = URI
-
- TEL-param =/ type-param / pid-param / pref-param / altid-param
- / any-param
-
- type-param-tel = "text" / "voice" / "fax" / "cell" / "video"
- / "pager" / "textphone" / iana-token / x-name
- ; type-param-tel MUST NOT be used with a property other than TEL.
-
-
-
-
-
-
-
-Perreault Standards Track [Page 35]
-
-RFC 6350 vCard August 2011
-
-
- Example:
-
- TEL;VALUE=uri;PREF=1;TYPE="voice,home":tel:+1-555-555-5555;ext=5555
- TEL;VALUE=uri;TYPE=home:tel:+33-01-23-45-67
-
-6.4.2. EMAIL
-
- Purpose: To specify the electronic mail address for communication
- with the object the vCard represents.
-
- Value type: A single text value.
-
- Cardinality: *
-
- Special notes: The property can include tye "PREF" parameter to
- indicate a preferred-use email address when more than one is
- specified.
-
- Even though the value is free-form UTF-8 text, it is likely to be
- interpreted by a Mail User Agent (MUA) as an "addr-spec", as
- defined in [RFC5322], Section 3.4.1. Readers should also be aware
- of the current work toward internationalized email addresses
- [RFC5335bis].
-
- ABNF:
-
- EMAIL-param = "VALUE=text" / pid-param / pref-param / type-param
- / altid-param / any-param
- EMAIL-value = text
-
- Example:
-
- EMAIL;TYPE=work:jqpublic@xyz.example.com
-
- EMAIL;PREF=1:jane_doe@example.com
-
-6.4.3. IMPP
-
- Purpose: To specify the URI for instant messaging and presence
- protocol communications with the object the vCard represents.
-
- Value type: A single URI.
-
- Cardinality: *
-
- Special notes: The property may include the "PREF" parameter to
- indicate that this is a preferred address and has the same
- semantics as the "PREF" parameter in a TEL property.
-
-
-
-Perreault Standards Track [Page 36]
-
-RFC 6350 vCard August 2011
-
-
- If this property's value is a URI that can be used for voice
- and/or video, the TEL property (Section 6.4.1) SHOULD be used in
- addition to this property.
-
- This property is adapted from [RFC4770], which is made obsolete by
- this document.
-
- ABNF:
-
- IMPP-param = "VALUE=uri" / pid-param / pref-param / type-param
- / mediatype-param / altid-param / any-param
- IMPP-value = URI
-
- Example:
-
- IMPP;PREF=1:xmpp:alice@example.com
-
-6.4.4. LANG
-
- Purpose: To specify the language(s) that may be used for contacting
- the entity associated with the vCard.
-
- Value type: A single language-tag value.
-
- Cardinality: *
-
- ABNF:
-
- LANG-param = "VALUE=language-tag" / pid-param / pref-param
- / altid-param / type-param / any-param
- LANG-value = Language-Tag
-
- Example:
-
- LANG;TYPE=work;PREF=1:en
- LANG;TYPE=work;PREF=2:fr
- LANG;TYPE=home:fr
-
-6.5. Geographical Properties
-
- These properties are concerned with information associated with
- geographical positions or regions associated with the object the
- vCard represents.
-
-6.5.1. TZ
-
- Purpose: To specify information related to the time zone of the
- object the vCard represents.
-
-
-
-Perreault Standards Track [Page 37]
-
-RFC 6350 vCard August 2011
-
-
- Value type: The default is a single text value. It can also be
- reset to a single URI or utc-offset value.
-
- Cardinality: *
-
- Special notes: It is expected that names from the public-domain
- Olson database [TZ-DB] will be used, but this is not a
- restriction. See also [IANA-TZ].
-
- Efforts are currently being directed at creating a standard URI
- scheme for expressing time zone information. Usage of such a
- scheme would ensure a high level of interoperability between
- implementations that support it.
-
- Note that utc-offset values SHOULD NOT be used because the UTC
- offset varies with time -- not just because of the usual daylight
- saving time shifts that occur in may regions, but often entire
- regions will "re-base" their overall offset. The actual offset
- may be +/- 1 hour (or perhaps a little more) than the one given.
-
- ABNF:
-
- TZ-param = "VALUE=" ("text" / "uri" / "utc-offset")
- TZ-value = text / URI / utc-offset
- ; Value and parameter MUST match.
-
- TZ-param =/ altid-param / pid-param / pref-param / type-param
- / mediatype-param / any-param
-
- Examples:
-
- TZ:Raleigh/North America
-
- TZ;VALUE=utc-offset:-0500
- ; Note: utc-offset format is NOT RECOMMENDED.
-
-6.5.2. GEO
-
- Purpose: To specify information related to the global positioning of
- the object the vCard represents.
-
- Value type: A single URI.
-
- Cardinality: *
-
- Special notes: The "geo" URI scheme [RFC5870] is particularly well
- suited for this property, but other schemes MAY be used.
-
-
-
-
-Perreault Standards Track [Page 38]
-
-RFC 6350 vCard August 2011
-
-
- ABNF:
-
- GEO-param = "VALUE=uri" / pid-param / pref-param / type-param
- / mediatype-param / altid-param / any-param
- GEO-value = URI
-
- Example:
-
- GEO:geo:37.386013,-122.082932
-
-6.6. Organizational Properties
-
- These properties are concerned with information associated with
- characteristics of the organization or organizational units of the
- object that the vCard represents.
-
-6.6.1. TITLE
-
- Purpose: To specify the position or job of the object the vCard
- represents.
-
- Value type: A single text value.
-
- Cardinality: *
-
- Special notes: This property is based on the X.520 Title attribute
- [CCITT.X520.1988].
-
- ABNF:
-
- TITLE-param = "VALUE=text" / language-param / pid-param
- / pref-param / altid-param / type-param / any-param
- TITLE-value = text
-
- Example:
-
- TITLE:Research Scientist
-
-6.6.2. ROLE
-
- Purpose: To specify the function or part played in a particular
- situation by the object the vCard represents.
-
- Value type: A single text value.
-
- Cardinality: *
-
-
-
-
-
-Perreault Standards Track [Page 39]
-
-RFC 6350 vCard August 2011
-
-
- Special notes: This property is based on the X.520 Business Category
- explanatory attribute [CCITT.X520.1988]. This property is
- included as an organizational type to avoid confusion with the
- semantics of the TITLE property and incorrect usage of that
- property when the semantics of this property is intended.
-
- ABNF:
-
- ROLE-param = "VALUE=text" / language-param / pid-param / pref-param
- / type-param / altid-param / any-param
- ROLE-value = text
-
- Example:
-
- ROLE:Project Leader
-
-6.6.3. LOGO
-
- Purpose: To specify a graphic image of a logo associated with the
- object the vCard represents.
-
- Value type: A single URI.
-
- Cardinality: *
-
- ABNF:
-
- LOGO-param = "VALUE=uri" / language-param / pid-param / pref-param
- / type-param / mediatype-param / altid-param / any-param
- LOGO-value = URI
-
- Examples:
-
- LOGO:http://www.example.com/pub/logos/abccorp.jpg
-
- LOGO:data:image/jpeg;base64,MIICajCCAdOgAwIBAgICBEUwDQYJKoZIhvc
- AQEEBQAwdzELMAkGA1UEBhMCVVMxLDAqBgNVBAoTI05ldHNjYXBlIENvbW11bm
- ljYXRpb25zIENvcnBvcmF0aW9uMRwwGgYDVQQLExNJbmZvcm1hdGlvbiBTeXN0
- <...the remainder of base64-encoded data...>
-
-6.6.4. ORG
-
- Purpose: To specify the organizational name and units associated
- with the vCard.
-
- Value type: A single structured text value consisting of components
- separated by the SEMICOLON character (U+003B).
-
-
-
-
-Perreault Standards Track [Page 40]
-
-RFC 6350 vCard August 2011
-
-
- Cardinality: *
-
- Special notes: The property is based on the X.520 Organization Name
- and Organization Unit attributes [CCITT.X520.1988]. The property
- value is a structured type consisting of the organization name,
- followed by zero or more levels of organizational unit names.
-
- The SORT-AS parameter MAY be applied to this property.
-
- ABNF:
-
- ORG-param = "VALUE=text" / sort-as-param / language-param
- / pid-param / pref-param / altid-param / type-param
- / any-param
- ORG-value = component *(";" component)
-
- Example: A property value consisting of an organizational name,
- organizational unit #1 name, and organizational unit #2 name.
-
- ORG:ABC\, Inc.;North American Division;Marketing
-
-6.6.5. MEMBER
-
- Purpose: To include a member in the group this vCard represents.
-
- Value type: A single URI. It MAY refer to something other than a
- vCard object. For example, an email distribution list could
- employ the "mailto" URI scheme [RFC6068] for efficiency.
-
- Cardinality: *
-
- Special notes: This property MUST NOT be present unless the value of
- the KIND property is "group".
-
- ABNF:
-
- MEMBER-param = "VALUE=uri" / pid-param / pref-param / altid-param
- / mediatype-param / any-param
- MEMBER-value = URI
-
-
-
-
-
-
-
-
-
-
-
-
-Perreault Standards Track [Page 41]
-
-RFC 6350 vCard August 2011
-
-
- Examples:
-
- BEGIN:VCARD
- VERSION:4.0
- KIND:group
- FN:The Doe family
- MEMBER:urn:uuid:03a0e51f-d1aa-4385-8a53-e29025acd8af
- MEMBER:urn:uuid:b8767877-b4a1-4c70-9acc-505d3819e519
- END:VCARD
- BEGIN:VCARD
- VERSION:4.0
- FN:John Doe
- UID:urn:uuid:03a0e51f-d1aa-4385-8a53-e29025acd8af
- END:VCARD
- BEGIN:VCARD
- VERSION:4.0
- FN:Jane Doe
- UID:urn:uuid:b8767877-b4a1-4c70-9acc-505d3819e519
- END:VCARD
-
- BEGIN:VCARD
- VERSION:4.0
- KIND:group
- FN:Funky distribution list
- MEMBER:mailto:subscriber1@example.com
- MEMBER:xmpp:subscriber2@example.com
- MEMBER:sip:subscriber3@example.com
- MEMBER:tel:+1-418-555-5555
- END:VCARD
-
-6.6.6. RELATED
-
- Purpose: To specify a relationship between another entity and the
- entity represented by this vCard.
-
- Value type: A single URI. It can also be reset to a single text
- value. The text value can be used to specify textual information.
-
- Cardinality: *
-
- Special notes: The TYPE parameter MAY be used to characterize the
- related entity. It contains a comma-separated list of values that
- are registered with IANA as described in Section 10.2. The
- registry is pre-populated with the values defined in [xfn]. This
- document also specifies two additional values:
-
- agent: an entity who may sometimes act on behalf of the entity
- associated with the vCard.
-
-
-
-Perreault Standards Track [Page 42]
-
-RFC 6350 vCard August 2011
-
-
- emergency: indicates an emergency contact
-
- ABNF:
-
- RELATED-param = RELATED-param-uri / RELATED-param-text
- RELATED-value = URI / text
- ; Parameter and value MUST match.
-
- RELATED-param-uri = "VALUE=uri" / mediatype-param
- RELATED-param-text = "VALUE=text" / language-param
-
- RELATED-param =/ pid-param / pref-param / altid-param / type-param
- / any-param
-
- type-param-related = related-type-value *("," related-type-value)
- ; type-param-related MUST NOT be used with a property other than
- ; RELATED.
-
- related-type-value = "contact" / "acquaintance" / "friend" / "met"
- / "co-worker" / "colleague" / "co-resident"
- / "neighbor" / "child" / "parent"
- / "sibling" / "spouse" / "kin" / "muse"
- / "crush" / "date" / "sweetheart" / "me"
- / "agent" / "emergency"
-
- Examples:
-
- RELATED;TYPE=friend:urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6
- RELATED;TYPE=contact:http://example.com/directory/jdoe.vcf
- RELATED;TYPE=co-worker;VALUE=text:Please contact my assistant Jane
- Doe for any inquiries.
-
-6.7. Explanatory Properties
-
- These properties are concerned with additional explanations, such as
- that related to informational notes or revisions specific to the
- vCard.
-
-6.7.1. CATEGORIES
-
- Purpose: To specify application category information about the
- vCard, also known as "tags".
-
- Value type: One or more text values separated by a COMMA character
- (U+002C).
-
- Cardinality: *
-
-
-
-
-Perreault Standards Track [Page 43]
-
-RFC 6350 vCard August 2011
-
-
- ABNF:
-
- CATEGORIES-param = "VALUE=text" / pid-param / pref-param
- / type-param / altid-param / any-param
- CATEGORIES-value = text-list
-
- Example:
-
- CATEGORIES:TRAVEL AGENT
-
- CATEGORIES:INTERNET,IETF,INDUSTRY,INFORMATION TECHNOLOGY
-
-6.7.2. NOTE
-
- Purpose: To specify supplemental information or a comment that is
- associated with the vCard.
-
- Value type: A single text value.
-
- Cardinality: *
-
- Special notes: The property is based on the X.520 Description
- attribute [CCITT.X520.1988].
-
- ABNF:
-
- NOTE-param = "VALUE=text" / language-param / pid-param / pref-param
- / type-param / altid-param / any-param
- NOTE-value = text
-
- Example:
-
- NOTE:This fax number is operational 0800 to 1715
- EST\, Mon-Fri.
-
-6.7.3. PRODID
-
- Purpose: To specify the identifier for the product that created the
- vCard object.
-
- Type value: A single text value.
-
- Cardinality: *1
-
- Special notes: Implementations SHOULD use a method such as that
- specified for Formal Public Identifiers in [ISO9070] or for
- Universal Resource Names in [RFC3406] to ensure that the text
- value is unique.
-
-
-
-Perreault Standards Track [Page 44]
-
-RFC 6350 vCard August 2011
-
-
- ABNF:
-
- PRODID-param = "VALUE=text" / any-param
- PRODID-value = text
-
- Example:
-
- PRODID:-//ONLINE DIRECTORY//NONSGML Version 1//EN
-
-6.7.4. REV
-
- Purpose: To specify revision information about the current vCard.
-
- Value type: A single timestamp value.
-
- Cardinality: *1
-
- Special notes: The value distinguishes the current revision of the
- information in this vCard for other renditions of the information.
-
- ABNF:
-
- REV-param = "VALUE=timestamp" / any-param
- REV-value = timestamp
-
- Example:
-
- REV:19951031T222710Z
-
-6.7.5. SOUND
-
- Purpose: To specify a digital sound content information that
- annotates some aspect of the vCard. This property is often used
- to specify the proper pronunciation of the name property value of
- the vCard.
-
- Value type: A single URI.
-
- Cardinality: *
-
- ABNF:
-
- SOUND-param = "VALUE=uri" / language-param / pid-param / pref-param
- / type-param / mediatype-param / altid-param
- / any-param
- SOUND-value = URI
-
-
-
-
-
-Perreault Standards Track [Page 45]
-
-RFC 6350 vCard August 2011
-
-
- Example:
-
- SOUND:CID:JOHNQPUBLIC.part8.19960229T080000.xyzMail@example.com
-
- SOUND:data:audio/basic;base64,MIICajCCAdOgAwIBAgICBEUwDQYJKoZIh
- AQEEBQAwdzELMAkGA1UEBhMCVVMxLDAqBgNVBAoTI05ldHNjYXBlIENvbW11bm
- ljYXRpb25zIENvcnBvcmF0aW9uMRwwGgYDVQQLExNJbmZvcm1hdGlvbiBTeXN0
- <...the remainder of base64-encoded data...>
-
-6.7.6. UID
-
- Purpose: To specify a value that represents a globally unique
- identifier corresponding to the entity associated with the vCard.
-
- Value type: A single URI value. It MAY also be reset to free-form
- text.
-
- Cardinality: *1
-
- Special notes: This property is used to uniquely identify the object
- that the vCard represents. The "uuid" URN namespace defined in
- [RFC4122] is particularly well suited to this task, but other URI
- schemes MAY be used. Free-form text MAY also be used.
-
- ABNF:
-
- UID-param = UID-uri-param / UID-text-param
- UID-value = UID-uri-value / UID-text-value
- ; Value and parameter MUST match.
-
- UID-uri-param = "VALUE=uri"
- UID-uri-value = URI
-
- UID-text-param = "VALUE=text"
- UID-text-value = text
-
- UID-param =/ any-param
-
- Example:
-
- UID:urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6
-
-
-
-
-
-
-
-
-
-
-Perreault Standards Track [Page 46]
-
-RFC 6350 vCard August 2011
-
-
-6.7.7. CLIENTPIDMAP
-
- Purpose: To give a global meaning to a local PID source identifier.
-
- Value type: A semicolon-separated pair of values. The first field
- is a small integer corresponding to the second field of a PID
- parameter instance. The second field is a URI. The "uuid" URN
- namespace defined in [RFC4122] is particularly well suited to this
- task, but other URI schemes MAY be used.
-
- Cardinality: *
-
- Special notes: PID source identifiers (the source identifier is the
- second field in a PID parameter instance) are small integers that
- only have significance within the scope of a single vCard
- instance. Each distinct source identifier present in a vCard MUST
- have an associated CLIENTPIDMAP. See Section 7 for more details
- on the usage of CLIENTPIDMAP.
-
- PID source identifiers MUST be strictly positive. Zero is not
- allowed.
-
- As a special exception, the PID parameter MUST NOT be applied to
- this property.
-
- ABNF:
-
- CLIENTPIDMAP-param = any-param
- CLIENTPIDMAP-value = 1*DIGIT ";" URI
-
- Example:
-
- TEL;PID=3.1,4.2;VALUE=uri:tel:+1-555-555-5555
- EMAIL;PID=4.1,5.2:jdoe@example.com
- CLIENTPIDMAP:1;urn:uuid:3df403f4-5924-4bb7-b077-3c711d9eb34b
- CLIENTPIDMAP:2;urn:uuid:d89c9c7a-2e1b-4832-82de-7e992d95faa5
-
-6.7.8. URL
-
- Purpose: To specify a uniform resource locator associated with the
- object to which the vCard refers. Examples for individuals
- include personal web sites, blogs, and social networking site
- identifiers.
-
- Cardinality: *
-
- Value type: A single uri value.
-
-
-
-
-Perreault Standards Track [Page 47]
-
-RFC 6350 vCard August 2011
-
-
- ABNF:
-
- URL-param = "VALUE=uri" / pid-param / pref-param / type-param
- / mediatype-param / altid-param / any-param
- URL-value = URI
-
- Example:
-
- URL:http://example.org/restaurant.french/~chezchic.html
-
-6.7.9. VERSION
-
- Purpose: To specify the version of the vCard specification used to
- format this vCard.
-
- Value type: A single text value.
-
- Cardinality: 1
-
- Special notes: This property MUST be present in the vCard object,
- and it must appear immediately after BEGIN:VCARD. The value MUST
- be "4.0" if the vCard corresponds to this specification. Note
- that earlier versions of vCard allowed this property to be placed
- anywhere in the vCard object, or even to be absent.
-
- ABNF:
-
- VERSION-param = "VALUE=text" / any-param
- VERSION-value = "4.0"
-
- Example:
-
- VERSION:4.0
-
-6.8. Security Properties
-
- These properties are concerned with the security of communication
- pathways or access to the vCard.
-
-6.8.1. KEY
-
- Purpose: To specify a public key or authentication certificate
- associated with the object that the vCard represents.
-
- Value type: A single URI. It can also be reset to a text value.
-
- Cardinality: *
-
-
-
-
-Perreault Standards Track [Page 48]
-
-RFC 6350 vCard August 2011
-
-
- ABNF:
-
- KEY-param = KEY-uri-param / KEY-text-param
- KEY-value = KEY-uri-value / KEY-text-value
- ; Value and parameter MUST match.
-
- KEY-uri-param = "VALUE=uri" / mediatype-param
- KEY-uri-value = URI
-
- KEY-text-param = "VALUE=text"
- KEY-text-value = text
-
- KEY-param =/ altid-param / pid-param / pref-param / type-param
- / any-param
-
- Examples:
-
- KEY:http://www.example.com/keys/jdoe.cer
-
- KEY;MEDIATYPE=application/pgp-keys:ftp://example.com/keys/jdoe
-
- KEY:data:application/pgp-keys;base64,MIICajCCAdOgAwIBAgICBE
- UwDQYJKoZIhvcNAQEEBQAwdzELMAkGA1UEBhMCVVMxLDAqBgNVBAoTI05l
- <... remainder of base64-encoded data ...>
-
-6.9. Calendar Properties
-
- These properties are further specified in [RFC2739].
-
-6.9.1. FBURL
-
- Purpose: To specify the URI for the busy time associated with the
- object that the vCard represents.
-
- Value type: A single URI value.
-
- Cardinality: *
-
- Special notes: Where multiple FBURL properties are specified, the
- default FBURL property is indicated with the PREF parameter. The
- FTP [RFC1738] or HTTP [RFC2616] type of URI points to an iCalendar
- [RFC5545] object associated with a snapshot of the next few weeks
- or months of busy time data. If the iCalendar object is
- represented as a file or document, its file extension should be
- ".ifb".
-
-
-
-
-
-
-Perreault Standards Track [Page 49]
-
-RFC 6350 vCard August 2011
-
-
- ABNF:
-
- FBURL-param = "VALUE=uri" / pid-param / pref-param / type-param
- / mediatype-param / altid-param / any-param
- FBURL-value = URI
-
- Examples:
-
- FBURL;PREF=1:http://www.example.com/busy/janedoe
- FBURL;MEDIATYPE=text/calendar:ftp://example.com/busy/project-a.ifb
-
-6.9.2. CALADRURI
-
- Purpose: To specify the calendar user address [RFC5545] to which a
- scheduling request [RFC5546] should be sent for the object
- represented by the vCard.
-
- Value type: A single URI value.
-
- Cardinality: *
-
- Special notes: Where multiple CALADRURI properties are specified,
- the default CALADRURI property is indicated with the PREF
- parameter.
-
- ABNF:
-
- CALADRURI-param = "VALUE=uri" / pid-param / pref-param / type-param
- / mediatype-param / altid-param / any-param
- CALADRURI-value = URI
-
- Example:
-
- CALADRURI;PREF=1:mailto:janedoe@example.com
- CALADRURI:http://example.com/calendar/jdoe
-
-6.9.3. CALURI
-
- Purpose: To specify the URI for a calendar associated with the
- object represented by the vCard.
-
- Value type: A single URI value.
-
- Cardinality: *
-
- Special notes: Where multiple CALURI properties are specified, the
- default CALURI property is indicated with the PREF parameter. The
- property should contain a URI pointing to an iCalendar [RFC5545]
-
-
-
-Perreault Standards Track [Page 50]
-
-RFC 6350 vCard August 2011
-
-
- object associated with a snapshot of the user's calendar store.
- If the iCalendar object is represented as a file or document, its
- file extension should be ".ics".
-
- ABNF:
-
- CALURI-param = "VALUE=uri" / pid-param / pref-param / type-param
- / mediatype-param / altid-param / any-param
- CALURI-value = URI
-
- Examples:
-
- CALURI;PREF=1:http://cal.example.com/calA
- CALURI;MEDIATYPE=text/calendar:ftp://ftp.example.com/calA.ics
-
-6.10. Extended Properties and Parameters
-
- The properties and parameters defined by this document can be
- extended. Non-standard, private properties and parameters with a
- name starting with "X-" may be defined bilaterally between two
- cooperating agents without outside registration or standardization.
-
-7. Synchronization
-
- vCard data often needs to be synchronized between devices. In this
- context, synchronization is defined as the intelligent merging of two
- representations of the same object. vCard 4.0 includes mechanisms to
- aid this process.
-
-7.1. Mechanisms
-
- Two mechanisms are available: the UID property is used to match
- multiple instances of the same vCard, while the PID parameter is used
- to match multiple instances of the same property.
-
- The term "matching" is used here to mean recognizing that two
- instances are in fact representations of the same object. For
- example, a single vCard that is shared with someone results in two
- vCard instances. After they have evolved separately, they still
- represent the same object, and therefore may be matched by a
- synchronization engine.
-
-7.1.1. Matching vCard Instances
-
- vCard instances for which the UID properties (Section 6.7.6) are
- equivalent MUST be matched. Equivalence is determined as specified
- in [RFC3986], Section 6.
-
-
-
-
-Perreault Standards Track [Page 51]
-
-RFC 6350 vCard August 2011
-
-
- In all other cases, vCard instances MAY be matched at the discretion
- of the synchronization engine.
-
-7.1.2. Matching Property Instances
-
- Property instances belonging to unmatched vCards MUST NOT be matched.
-
- Property instances whose name (e.g., EMAIL, TEL, etc.) is not the
- same MUST NOT be matched.
-
- Property instances whose name is CLIENTPIDMAP are handled separately
- and MUST NOT be matched. The synchronization MUST ensure that there
- is consistency of CLIENTPIDMAPs among matched vCard instances.
-
- Property instances belonging to matched vCards, whose name is the
- same, and whose maximum cardinality is 1, MUST be matched.
-
- Property instances belonging to matched vCards, whose name is the
- same, and whose PID parameters match, MUST be matched. See
- Section 7.1.3 for details on PID matching.
-
- In all other cases, property instances MAY be matched at the
- discretion of the synchronization engine.
-
-7.1.3. PID Matching
-
- Two PID values for which the first fields are equivalent represent
- the same local value.
-
- Two PID values representing the same local value and for which the
- second fields point to CLIENTPIDMAP properties whose second field
- URIs are equivalent (as specified in [RFC3986], Section 6) also
- represent the same global value.
-
- PID parameters for which at least one pair of their values represent
- the same global value MUST be matched.
-
- In all other cases, PID parameters MAY be matched at the discretion
- of the synchronization engine.
-
- For example, PID value "5.1", in the first vCard below, and PID value
- "5.2", in the second vCard below, represent the same global value.
-
-
-
-
-
-
-
-
-
-Perreault Standards Track [Page 52]
-
-RFC 6350 vCard August 2011
-
-
- BEGIN:VCARD
- VERSION:4.0
- EMAIL;PID=4.2,5.1:jdoe@example.com
- CLIENTPIDMAP:1;urn:uuid:3eef374e-7179-4196-a914-27358c3e6527
- CLIENTPIDMAP:2;urn:uuid:42bcd5a7-1699-4514-87b4-056edf68e9cc
- END:VCARD
-
- BEGIN:VCARD
- VERSION:4.0
- EMAIL;PID=5.1,5.2:john@example.com
- CLIENTPIDMAP:1;urn:uuid:0c75c629-6a8d-4d5e-a07f-1bb35846854d
- CLIENTPIDMAP:2;urn:uuid:3eef374e-7179-4196-a914-27358c3e6527
- END:VCARD
-
-7.2. Example
-
-7.2.1. Creation
-
- The following simple vCard is first created on a given device.
-
- BEGIN:VCARD
- VERSION:4.0
- UID:urn:uuid:4fbe8971-0bc3-424c-9c26-36c3e1eff6b1
- FN;PID=1.1:J. Doe
- N:Doe;J.;;;
- EMAIL;PID=1.1:jdoe@example.com
- CLIENTPIDMAP:1;urn:uuid:53e374d9-337e-4727-8803-a1e9c14e0556
- END:VCARD
-
- This new vCard is assigned the UID
- "urn:uuid:4fbe8971-0bc3-424c-9c26-36c3e1eff6b1" by the creating
- device. The FN and EMAIL properties are assigned the same local
- value of 1, and this value is given global context by associating it
- with "urn:uuid:53e374d9-337e-4727-8803-a1e9c14e0556", which
- represents the creating device. We are at liberty to reuse the same
- local value since instances of different properties will never be
- matched. The N property has no PID because it is forbidden by its
- maximum cardinality of 1.
-
-7.2.2. Initial Sharing
-
- This vCard is shared with a second device. Upon inspecting the UID
- property, the second device understands that this is a new vCard
- (i.e., unmatched) and thus the synchronization results in a simple
- copy.
-
-
-
-
-
-
-Perreault Standards Track [Page 53]
-
-RFC 6350 vCard August 2011
-
-
-7.2.3. Adding and Sharing a Property
-
- A new phone number is created on the first device, then the vCard is
- shared with the second device. This is what the second device
- receives:
-
- BEGIN:VCARD
- VERSION:4.0
- UID:urn:uuid:4fbe8971-0bc3-424c-9c26-36c3e1eff6b1
- FN;PID=1.1:J. Doe
- N:Doe;J.;;;
- EMAIL;PID=1.1:jdoe@example.com
- TEL;PID=1.1;VALUE=uri:tel:+1-555-555-5555
- CLIENTPIDMAP:1;urn:uuid:53e374d9-337e-4727-8803-a1e9c14e0556
- END:VCARD
-
- Upon inspecting the UID property, the second device matches the vCard
- it received to the vCard that it already has stored. It then starts
- comparing the properties of the two vCards in same-named pairs.
-
- The FN properties are matched because the PID parameters have the
- same global value. Since the property value is the same, no update
- takes place.
-
- The N properties are matched automatically because their maximum
- cardinality is 1. Since the property value is the same, no update
- takes place.
-
- The EMAIL properties are matched because the PID parameters have the
- same global value. Since the property value is the same, no update
- takes place.
-
- The TEL property in the new vCard is not matched to any in the stored
- vCard because no property in the stored vCard has the same name.
- Therefore, this property is copied from the new vCard to the stored
- vCard.
-
- The CLIENTPIDMAP property is handled separately by the
- synchronization engine. It ensures that it is consistent with the
- stored one. If it was not, the results would be up to the
- synchronization engine, and thus undefined by this document.
-
-7.2.4. Simultaneous Editing
-
- A new email address and a new phone number are added to the vCard on
- each of the two devices, and then a new synchronization event
- happens. Here are the vCards that are communicated to each other:
-
-
-
-
-Perreault Standards Track [Page 54]
-
-RFC 6350 vCard August 2011
-
-
- BEGIN:VCARD
- VERSION:4.0
- UID:urn:uuid:4fbe8971-0bc3-424c-9c26-36c3e1eff6b1
- FN;PID=1.1:J. Doe
- N:Doe;J.;;;
- EMAIL;PID=1.1:jdoe@example.com
- EMAIL;PID=2.1:boss@example.com
- TEL;PID=1.1;VALUE=uri:tel:+1-555-555-5555
- TEL;PID=2.1;VALUE=uri:tel:+1-666-666-6666
- CLIENTPIDMAP:1;urn:uuid:53e374d9-337e-4727-8803-a1e9c14e0556
- END:VCARD
-
- BEGIN:VCARD
- VERSION:4.0
- UID:urn:uuid:4fbe8971-0bc3-424c-9c26-36c3e1eff6b1
- FN;PID=1.1:J. Doe
- N:Doe;J.;;;
- EMAIL;PID=1.1:jdoe@example.com
- EMAIL;PID=2.2:ceo@example.com
- TEL;PID=1.1;VALUE=uri:tel:+1-555-555-5555
- TEL;PID=2.2;VALUE=uri:tel:+1-666-666-6666
- CLIENTPIDMAP:1;urn:uuid:53e374d9-337e-4727-8803-a1e9c14e0556
- CLIENTPIDMAP:2;urn:uuid:1f762d2b-03c4-4a83-9a03-75ff658a6eee
- END:VCARD
-
- On the first device, the same PID source identifier (1) is reused for
- the new EMAIL and TEL properties. On the second device, a new source
- identifier (2) is generated, and a corresponding CLIENTPIDMAP
- property is created. It contains the second device's identifier,
- "urn:uuid:1f762d2b-03c4-4a83-9a03-75ff658a6eee".
-
- The new EMAIL properties are unmatched on both sides since the PID
- global value is new in both cases. The sync thus results in a copy
- on both sides.
-
- Although the situation appears to be the same for the TEL properties,
- in this case, the synchronization engine is particularly smart and
- matches the two new TEL properties even though their PID global
- values are different. Note that in this case, the rules of
- Section 7.1.2 state that two properties MAY be matched at the
- discretion of the synchronization engine. Therefore, the two
- properties are merged.
-
- All this results in the following vCard, which is stored on both
- devices:
-
-
-
-
-
-
-Perreault Standards Track [Page 55]
-
-RFC 6350 vCard August 2011
-
-
- BEGIN:VCARD
- VERSION:4.0
- UID:urn:uuid:4fbe8971-0bc3-424c-9c26-36c3e1eff6b1
- FN:J. Doe
- N:Doe;J.;;;
- EMAIL;PID=1.1:jdoe@example.com
- EMAIL;PID=2.1:boss@example.com
- EMAIL;PID=2.2:ceo@example.com
- TEL;PID=1.1;VALUE=uri:tel:+1-555-555-5555
- TEL;PID=2.1,2.2;VALUE=uri:tel:+1-666-666-6666
- CLIENTPIDMAP:1;urn:uuid:53e374d9-337e-4727-8803-a1e9c14e0556
- CLIENTPIDMAP:2;urn:uuid:1f762d2b-03c4-4a83-9a03-75ff658a6eee
- END:VCARD
-
-7.2.5. Global Context Simplification
-
- The two devices finish their synchronization procedure by simplifying
- their global contexts. Since they haven't talked to any other
- device, the following vCard is for all purposes equivalent to the
- above. It is also shorter.
-
- BEGIN:VCARD
- VERSION:4.0
- UID:urn:uuid:4fbe8971-0bc3-424c-9c26-36c3e1eff6b1
- FN:J. Doe
- N:Doe;J.;;;
- EMAIL;PID=1.1:jdoe@example.com
- EMAIL;PID=2.1:boss@example.com
- EMAIL;PID=3.1:ceo@example.com
- TEL;PID=1.1;VALUE=uri:tel:+1-555-555-5555
- TEL;PID=2.1;VALUE=uri:tel:+1-666-666-6666
- CLIENTPIDMAP:1;urn:uuid:53e374d9-337e-4727-8803-a1e9c14e0556
- END:VCARD
-
- The details of global context simplification are unspecified by this
- document. They are left up to the synchronization engine. This
- example is merely intended to illustrate the possibility, which
- investigating would be, in the author's opinion, worthwhile.
-
-8. Example: Author's vCard
-
- BEGIN:VCARD
- VERSION:4.0
- FN:Simon Perreault
- N:Perreault;Simon;;;ing. jr,M.Sc.
- BDAY:--0203
- ANNIVERSARY:20090808T1430-0500
- GENDER:M
-
-
-
-Perreault Standards Track [Page 56]
-
-RFC 6350 vCard August 2011
-
-
- LANG;PREF=1:fr
- LANG;PREF=2:en
- ORG;TYPE=work:Viagenie
- ADR;TYPE=work:;Suite D2-630;2875 Laurier;
- Quebec;QC;G1V 2M2;Canada
- TEL;VALUE=uri;TYPE="work,voice";PREF=1:tel:+1-418-656-9254;ext=102
- TEL;VALUE=uri;TYPE="work,cell,voice,video,text":tel:+1-418-262-6501
- EMAIL;TYPE=work:simon.perreault@viagenie.ca
- GEO;TYPE=work:geo:46.772673,-71.282945
- KEY;TYPE=work;VALUE=uri:
- http://www.viagenie.ca/simon.perreault/simon.asc
- TZ:-0500
- URL;TYPE=home:http://nomis80.org
- END:VCARD
-
-9. Security Considerations
-
- o Internet mail is often used to transport vCards and is subject to
- many well-known security attacks, including monitoring, replay,
- and forgery. Care should be taken by any directory service in
- allowing information to leave the scope of the service itself,
- where any access controls or confidentiality can no longer be
- guaranteed. Applications should also take care to display
- directory data in a "safe" environment.
-
- o vCards can carry cryptographic keys or certificates, as described
- in Section 6.8.1.
-
- o vCards often carry information that can be sensitive (e.g.,
- birthday, address, and phone information). Although vCards have
- no inherent authentication or confidentiality provisions, they can
- easily be carried by any security mechanism that transfers MIME
- objects to address authentication or confidentiality (e.g., S/MIME
- [RFC5751], OpenPGP [RFC4880]). In cases where the confidentiality
- or authenticity of information contained in vCard is a concern,
- the vCard SHOULD be transported using one of these secure
- mechanisms. The KEY property (Section 6.8.1) can be used to
- transport the public key used by these mechanisms.
-
- o The information in a vCard may become out of date. In cases where
- the vitality of data is important to an originator of a vCard, the
- SOURCE property (Section 6.1.3) SHOULD be specified. In addition,
- the "REV" type described in Section 6.7.4 can be specified to
- indicate the last time that the vCard data was updated.
-
- o Many vCard properties may be used to transport URIs. Please refer
- to [RFC3986], Section 7, for considerations related to URIs.
-
-
-
-
-Perreault Standards Track [Page 57]
-
-RFC 6350 vCard August 2011
-
-
-10. IANA Considerations
-
-10.1. Media Type Registration
-
- IANA has registered the following Media Type (in
- ) and marked the text/directory Media Type as
- DEPRECATED.
-
- To: ietf-types@iana.org
-
- Subject: Registration of media type text/vcard
-
- Type name: text
-
- Subtype name: vcard
-
- Required parameters: none
-
- Optional parameters: version
-
- The "version" parameter is to be interpreted identically as the
- VERSION vCard property. If this parameter is present, all vCards
- in a text/vcard body part MUST have a VERSION property with value
- identical to that of this MIME parameter.
-
- "charset": as defined for text/plain [RFC2046]; encodings other
- than UTF-8 [RFC3629] MUST NOT be used.
-
- Encoding considerations: 8bit
-
- Security considerations: See Section 9.
-
- Interoperability considerations: The text/vcard media type is
- intended to identify vCard data of any version. There are older
- specifications of vCard [RFC2426][vCard21] still in common use.
- While these formats are similar, they are not strictly compatible.
- In general, it is necessary to inspect the value of the VERSION
- property (see Section 6.7.9) for identifying the standard to which
- a given vCard object conforms.
-
- In addition, the following media types are known to have been used
- to refer to vCard data. They should be considered deprecated in
- favor of text/vcard.
-
- * text/directory
- * text/directory; profile=vcard
- * text/x-vcard
-
-
-
-
-Perreault Standards Track [Page 58]
-
-RFC 6350 vCard August 2011
-
-
- Published specification: RFC 6350
-
- Applications that use this media type: They are numerous, diverse,
- and include mail user agents, instant messaging clients, address
- book applications, directory servers, and customer relationship
- management software.
-
- Additional information:
-
- Magic number(s):
-
- File extension(s): .vcf .vcard
-
- Macintosh file type code(s):
-
- Person & email address to contact for further information: vCard
- discussion mailing list
-
- Intended usage: COMMON
-
- Restrictions on usage: none
-
- Author: Simon Perreault
-
- Change controller: IETF
-
-10.2. Registering New vCard Elements
-
- This section defines the process for registering new or modified
- vCard elements (i.e., properties, parameters, value data types, and
- values) with IANA.
-
-10.2.1. Registration Procedure
-
- The IETF has created a mailing list, vcarddav@ietf.org, which can be
- used for public discussion of vCard element proposals prior to
- registration. Use of the mailing list is strongly encouraged. The
- IESG has appointed a designated expert who will monitor the
- vcarddav@ietf.org mailing list and review registrations.
-
- Registration of new vCard elements MUST be reviewed by the designated
- expert and published in an RFC. A Standards Track RFC is REQUIRED
- for the registration of new value data types that modify existing
- properties. A Standards Track RFC is also REQUIRED for registration
- of vCard elements that modify vCard elements previously documented in
- a Standards Track RFC.
-
-
-
-
-
-Perreault Standards Track [Page 59]
-
-RFC 6350 vCard August 2011
-
-
- The registration procedure begins when a completed registration
- template, defined in the sections below, is sent to vcarddav@ietf.org
- and iana@iana.org. Within two weeks, the designated expert is
- expected to tell IANA and the submitter of the registration whether
- the registration is approved, approved with minor changes, or
- rejected with cause. When a registration is rejected with cause, it
- can be re-submitted if the concerns listed in the cause are
- addressed. Decisions made by the designated expert can be appealed
- to the IESG Applications Area Director, then to the IESG. They
- follow the normal appeals procedure for IESG decisions.
-
- Once the registration procedure concludes successfully, IANA creates
- or modifies the corresponding record in the vCard registry. The
- completed registration template is discarded.
-
- An RFC specifying new vCard elements MUST include the completed
- registration templates, which MAY be expanded with additional
- information. These completed templates are intended to go in the
- body of the document, not in the IANA Considerations section.
-
- Finally, note that there is an XML representation for vCard defined
- in [RFC6351]. An XML representation SHOULD be defined for new vCard
- elements.
-
-10.2.2. Vendor Namespace
-
- The vendor namespace is used for vCard elements associated with
- commercially available products. "Vendor" or "producer" are
- construed as equivalent and very broadly in this context.
-
- A registration may be placed in the vendor namespace by anyone who
- needs to interchange files associated with the particular product.
- However, the registration formally belongs to the vendor or
- organization handling the vCard elements in the namespace being
- registered. Changes to the specification will be made at their
- request, as discussed in subsequent sections.
-
- vCard elements belonging to the vendor namespace will be
- distinguished by the "VND-" prefix. This is followed by an IANA-
- registered Private Enterprise Number (PEN), a dash, and a vCard
- element designation of the vendor's choosing (e.g., "VND-123456-
- MUDPIE").
-
- While public exposure and review of vCard elements to be registered
- in the vendor namespace are not required, using the vcarddav@ietf.org
- mailing list for review is strongly encouraged to improve the quality
- of those specifications. Registrations in the vendor namespace may
- be submitted directly to the IANA.
-
-
-
-Perreault Standards Track [Page 60]
-
-RFC 6350 vCard August 2011
-
-
-10.2.3. Registration Template for Properties
-
- A property is defined by completing the following template.
-
- Namespace: Empty for the global namespace, "VND-NNNN-" for a vendor-
- specific property (where NNNN is replaced by the vendor's PEN).
-
- Property name: The name of the property.
-
- Purpose: The purpose of the property. Give a short but clear
- description.
-
- Value type: Any of the valid value types for the property value
- needs to be specified. The default value type also needs to be
- specified.
-
- Cardinality: See Section 6.
-
- Property parameters: Any of the valid property parameters for the
- property MUST be specified.
-
- Description: Any special notes about the property, how it is to be
- used, etc.
-
- Format definition: The ABNF for the property definition needs to be
- specified.
-
- Example(s): One or more examples of instances of the property need
- to be specified.
-
-10.2.4. Registration Template for Parameters
-
- A parameter is defined by completing the following template.
-
- Namespace: Empty for the global namespace, "VND-NNNN-" for a vendor-
- specific property (where NNNN is replaced by the vendor's PEN).
-
- Parameter name: The name of the parameter.
-
- Purpose: The purpose of the parameter. Give a short but clear
- description.
-
- Description: Any special notes about the parameter, how it is to be
- used, etc.
-
- Format definition: The ABNF for the parameter definition needs to be
- specified.
-
-
-
-
-Perreault Standards Track [Page 61]
-
-RFC 6350 vCard August 2011
-
-
- Example(s): One or more examples of instances of the parameter need
- to be specified.
-
-10.2.5. Registration Template for Value Data Types
-
- A value data type is defined by completing the following template.
-
- Value name: The name of the value type.
-
- Purpose: The purpose of the value type. Give a short but clear
- description.
-
- Description: Any special notes about the value type, how it is to be
- used, etc.
-
- Format definition: The ABNF for the value type definition needs to
- be specified.
-
- Example(s): One or more examples of instances of the value type need
- to be specified.
-
-10.2.6. Registration Template for Values
-
- A value is defined by completing the following template.
-
- Value: The value literal.
-
- Purpose: The purpose of the value. Give a short but clear
- description.
-
- Conformance: The vCard properties and/or parameters that can take
- this value needs to be specified.
-
- Example(s): One or more examples of instances of the value need to
- be specified.
-
- The following is a fictitious example of a registration of a vCard
- value:
-
- Value: supervisor
-
- Purpose: It means that the related entity is the direct hierarchical
- superior (i.e., supervisor or manager) of the entity this vCard
- represents.
-
- Conformance: This value can be used with the "TYPE" parameter
- applied on the "RELATED" property.
-
-
-
-
-Perreault Standards Track [Page 62]
-
-RFC 6350 vCard August 2011
-
-
- Example(s):
-
- RELATED;TYPE=supervisor:urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6
-
-10.3. Initial vCard Elements Registries
-
- The IANA has created and will maintain the following registries for
- vCard elements with pointers to appropriate reference documents. The
- registries are grouped together under the heading "vCard Elements".
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Perreault Standards Track [Page 63]
-
-RFC 6350 vCard August 2011
-
-
-10.3.1. Properties Registry
-
- The following table has been used to initialize the properties
- registry.
-
- +-----------+--------------+-------------------------+
- | Namespace | Property | Reference |
- +-----------+--------------+-------------------------+
- | | SOURCE | RFC 6350, Section 6.1.3 |
- | | KIND | RFC 6350, Section 6.1.4 |
- | | XML | RFC 6350, Section 6.1.5 |
- | | FN | RFC 6350, Section 6.2.1 |
- | | N | RFC 6350, Section 6.2.2 |
- | | NICKNAME | RFC 6350, Section 6.2.3 |
- | | PHOTO | RFC 6350, Section 6.2.4 |
- | | BDAY | RFC 6350, Section 6.2.5 |
- | | ANNIVERSARY | RFC 6350, Section 6.2.6 |
- | | GENDER | RFC 6350, Section 6.2.7 |
- | | ADR | RFC 6350, Section 6.3.1 |
- | | TEL | RFC 6350, Section 6.4.1 |
- | | EMAIL | RFC 6350, Section 6.4.2 |
- | | IMPP | RFC 6350, Section 6.4.3 |
- | | LANG | RFC 6350, Section 6.4.4 |
- | | TZ | RFC 6350, Section 6.5.1 |
- | | GEO | RFC 6350, Section 6.5.2 |
- | | TITLE | RFC 6350, Section 6.6.1 |
- | | ROLE | RFC 6350, Section 6.6.2 |
- | | LOGO | RFC 6350, Section 6.6.3 |
- | | ORG | RFC 6350, Section 6.6.4 |
- | | MEMBER | RFC 6350, Section 6.6.5 |
- | | RELATED | RFC 6350, Section 6.6.6 |
- | | CATEGORIES | RFC 6350, Section 6.7.1 |
- | | NOTE | RFC 6350, Section 6.7.2 |
- | | PRODID | RFC 6350, Section 6.7.3 |
- | | REV | RFC 6350, Section 6.7.4 |
- | | SOUND | RFC 6350, Section 6.7.5 |
- | | UID | RFC 6350, Section 6.7.6 |
- | | CLIENTPIDMAP | RFC 6350, Section 6.7.7 |
- | | URL | RFC 6350, Section 6.7.8 |
- | | VERSION | RFC 6350, Section 6.7.9 |
- | | KEY | RFC 6350, Section 6.8.1 |
- | | FBURL | RFC 6350, Section 6.9.1 |
- | | CALADRURI | RFC 6350, Section 6.9.2 |
- | | CALURI | RFC 6350, Section 6.9.3 |
- +-----------+--------------+-------------------------+
-
-
-
-
-
-
-Perreault Standards Track [Page 64]
-
-RFC 6350 vCard August 2011
-
-
-10.3.2. Parameters Registry
-
- The following table has been used to initialize the parameters
- registry.
-
- +-----------+-----------+------------------------+
- | Namespace | Parameter | Reference |
- +-----------+-----------+------------------------+
- | | LANGUAGE | RFC 6350, Section 5.1 |
- | | VALUE | RFC 6350, Section 5.2 |
- | | PREF | RFC 6350, Section 5.3 |
- | | ALTID | RFC 6350, Section 5.4 |
- | | PID | RFC 6350, Section 5.5 |
- | | TYPE | RFC 6350, Section 5.6 |
- | | MEDIATYPE | RFC 6350, Section 5.7 |
- | | CALSCALE | RFC 6350, Section 5.8 |
- | | SORT-AS | RFC 6350, Section 5.9 |
- | | GEO | RFC 6350, Section 5.10 |
- | | TZ | RFC 6350, Section 5.11 |
- +-----------+-----------+------------------------+
-
-10.3.3. Value Data Types Registry
-
- The following table has been used to initialize the parameters
- registry.
-
- +------------------+-------------------------+
- | Value Data Type | Reference |
- +------------------+-------------------------+
- | BOOLEAN | RFC 6350, Section 4.4 |
- | DATE | RFC 6350, Section 4.3.1 |
- | DATE-AND-OR-TIME | RFC 6350, Section 4.3.4 |
- | DATE-TIME | RFC 6350, Section 4.3.3 |
- | FLOAT | RFC 6350, Section 4.6 |
- | INTEGER | RFC 6350, Section 4.5 |
- | LANGUAGE-TAG | RFC 6350, Section 4.8 |
- | TEXT | RFC 6350, Section 4.1 |
- | TIME | RFC 6350, Section 4.3.2 |
- | TIMESTAMP | RFC 6350, Section 4.3.5 |
- | URI | RFC 6350, Section 4.2 |
- | UTC-OFFSET | RFC 6350, Section 4.7 |
- +------------------+-------------------------+
-
-
-
-
-
-
-
-
-
-Perreault Standards Track [Page 65]
-
-RFC 6350 vCard August 2011
-
-
-10.3.4. Values Registries
-
- Separate tables are used for property and parameter values.
-
- The following table is to be used to initialize the property values
- registry.
-
- +----------+------------+-------------------------+
- | Property | Value | Reference |
- +----------+------------+-------------------------+
- | BEGIN | VCARD | RFC 6350, Section 6.1.1 |
- | END | VCARD | RFC 6350, Section 6.1.2 |
- | KIND | individual | RFC 6350, Section 6.1.4 |
- | KIND | group | RFC 6350, Section 6.1.4 |
- | KIND | org | RFC 6350, Section 6.1.4 |
- | KIND | location | RFC 6350, Section 6.1.4 |
- +----------+------------+-------------------------+
-
- The following table has been used to initialize the parameter values
- registry.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Perreault Standards Track [Page 66]
-
-RFC 6350 vCard August 2011
-
-
- +------------------------+-----------+--------------+---------------+
- | Property | Parameter | Value | Reference |
- +------------------------+-----------+--------------+---------------+
- | FN, NICKNAME, PHOTO, | TYPE | work | RFC 6350, |
- | ADR, TEL, EMAIL, IMPP, | | | Section 5.6 |
- | LANG, TZ, GEO, TITLE, | | | |
- | ROLE, LOGO, ORG, | | | |
- | RELATED, CATEGORIES, | | | |
- | NOTE, SOUND, URL, KEY, | | | |
- | FBURL, CALADRURI, and | | | |
- | CALURI | | | |
- | FN, NICKNAME, PHOTO, | TYPE | home | RFC 6350, |
- | ADR, TEL, EMAIL, IMPP, | | | Section 5.6 |
- | LANG, TZ, GEO, TITLE, | | | |
- | ROLE, LOGO, ORG, | | | |
- | RELATED, CATEGORIES, | | | |
- | NOTE, SOUND, URL, KEY, | | | |
- | FBURL, CALADRURI, and | | | |
- | CALURI | | | |
- | TEL | TYPE | text | RFC 6350, |
- | | | | Section 6.4.1 |
- | TEL | TYPE | voice | RFC 6350, |
- | | | | Section 6.4.1 |
- | TEL | TYPE | fax | RFC 6350, |
- | | | | Section 6.4.1 |
- | TEL | TYPE | cell | RFC 6350, |
- | | | | Section 6.4.1 |
- | TEL | TYPE | video | RFC 6350, |
- | | | | Section 6.4.1 |
- | TEL | TYPE | pager | RFC 6350, |
- | | | | Section 6.4.1 |
- | TEL | TYPE | textphone | RFC 6350, |
- | | | | Section 6.4.1 |
- | BDAY, ANNIVERSARY | CALSCALE | gregorian | RFC 6350, |
- | | | | Section 5.8 |
- | RELATED | TYPE | contact | RFC 6350, |
- | | | | Section 6.6.6 |
- | | | | and [xfn] |
- | RELATED | TYPE | acquaintance | RFC 6350, |
- | | | | Section 6.6.6 |
- | | | | and [xfn] |
- | RELATED | TYPE | friend | RFC 6350, |
- | | | | Section 6.6.6 |
- | | | | and [xfn] |
- | RELATED | TYPE | met | RFC 6350, |
- | | | | Section 6.6.6 |
- | | | | and [xfn] |
-
-
-
-
-Perreault Standards Track [Page 67]
-
-RFC 6350 vCard August 2011
-
-
- | RELATED | TYPE | co-worker | RFC 6350, |
- | | | | Section 6.6.6 |
- | | | | and [xfn] |
- | RELATED | TYPE | colleague | RFC 6350, |
- | | | | Section 6.6.6 |
- | | | | and [xfn] |
- | RELATED | TYPE | co-resident | RFC 6350, |
- | | | | Section 6.6.6 |
- | | | | and [xfn] |
- | RELATED | TYPE | neighbor | RFC 6350, |
- | | | | Section 6.6.6 |
- | | | | and [xfn] |
- | RELATED | TYPE | child | RFC 6350, |
- | | | | Section 6.6.6 |
- | | | | and [xfn] |
- | RELATED | TYPE | parent | RFC 6350, |
- | | | | Section 6.6.6 |
- | | | | and [xfn] |
- | RELATED | TYPE | sibling | RFC 6350, |
- | | | | Section 6.6.6 |
- | | | | and [xfn] |
- | RELATED | TYPE | spouse | RFC 6350, |
- | | | | Section 6.6.6 |
- | | | | and [xfn] |
- | RELATED | TYPE | kin | RFC 6350, |
- | | | | Section 6.6.6 |
- | | | | and [xfn] |
- | RELATED | TYPE | muse | RFC 6350, |
- | | | | Section 6.6.6 |
- | | | | and [xfn] |
- | RELATED | TYPE | crush | RFC 6350, |
- | | | | Section 6.6.6 |
- | | | | and [xfn] |
- | RELATED | TYPE | date | RFC 6350, |
- | | | | Section 6.6.6 |
- | | | | and [xfn] |
- | RELATED | TYPE | sweetheart | RFC 6350, |
- | | | | Section 6.6.6 |
- | | | | and [xfn] |
- | RELATED | TYPE | me | RFC 6350, |
- | | | | Section 6.6.6 |
- | | | | and [xfn] |
- | RELATED | TYPE | agent | RFC 6350, |
- | | | | Section 6.6.6 |
- | RELATED | TYPE | emergency | RFC 6350, |
- | | | | Section 6.6.6 |
- +------------------------+-----------+--------------+---------------+
-
-
-
-
-Perreault Standards Track [Page 68]
-
-RFC 6350 vCard August 2011
-
-
-11. Acknowledgments
-
- The authors would like to thank Tim Howes, Mark Smith, and Frank
- Dawson, the original authors of [RFC2425] and [RFC2426], Pete
- Resnick, who got this effort started and provided help along the way,
- as well as the following individuals who have participated in the
- drafting, review, and discussion of this memo:
-
- Aki Niemi, Andy Mabbett, Alexander Mayrhofer, Alexey Melnikov, Anil
- Srivastava, Barry Leiba, Ben Fortuna, Bernard Desruisseaux, Bernie
- Hoeneisen, Bjoern Hoehrmann, Caleb Richardson, Chris Bryant, Chris
- Newman, Cyrus Daboo, Daisuke Miyakawa, Dan Brickley, Dan Mosedale,
- Dany Cauchie, Darryl Champagne, Dave Thewlis, Filip Navara, Florian
- Zeitz, Helge Hess, Jari Urpalainen, Javier Godoy, Jean-Luc Schellens,
- Joe Hildebrand, Jose Luis Gayosso, Joseph Smarr, Julian Reschke,
- Kepeng Li, Kevin Marks, Kevin Wu Won, Kurt Zeilenga, Lisa Dusseault,
- Marc Blanchet, Mark Paterson, Markus Lorenz, Michael Haardt, Mike
- Douglass, Nick Levinson, Peter K. Sheerin, Peter Mogensen, Peter
- Saint-Andre, Renato Iannella, Rohit Khare, Sly Gryphon, Stephane
- Bortzmeyer, Tantek Celik, and Zoltan Ordogh.
-
-12. References
-
-12.1. Normative References
-
- [CCITT.X520.1988]
- International Telephone and Telegraph Consultative
- Committee, "Information Technology - Open Systems
- Interconnection - The Directory: Selected Attribute
- Types", CCITT Recommendation X.520, November 1988.
-
- [IEEE.754.2008]
- Institute of Electrical and Electronics Engineers,
- "Standard for Binary Floating-Point Arithmetic",
- IEEE Standard 754, August 2008.
-
- [ISO.8601.2000]
- International Organization for Standardization, "Data
- elements and interchange formats - Information interchange
- - Representation of dates and times", ISO Standard 8601,
- December 2000.
-
- [ISO.8601.2004]
- International Organization for Standardization, "Data
- elements and interchange formats - Information interchange
- - Representation of dates and times", ISO Standard 8601,
- December 2004.
-
-
-
-
-Perreault Standards Track [Page 69]
-
-RFC 6350 vCard August 2011
-
-
- [RFC2045] Freed, N. and N. Borenstein, "Multipurpose Internet Mail
- Extensions (MIME) Part One: Format of Internet Message
- Bodies", RFC 2045, November 1996.
-
- [RFC2046] Freed, N. and N. Borenstein, "Multipurpose Internet Mail
- Extensions (MIME) Part Two: Media Types", RFC 2046,
- November 1996.
-
- [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
- Requirement Levels", BCP 14, RFC 2119, March 1997.
-
- [RFC2739] Small, T., Hennessy, D., and F. Dawson, "Calendar
- Attributes for vCard and LDAP", RFC 2739, January 2000.
-
- [RFC3629] Yergeau, F., "UTF-8, a transformation format of ISO
- 10646", STD 63, RFC 3629, November 2003.
-
- [RFC3966] Schulzrinne, H., "The tel URI for Telephone Numbers",
- RFC 3966, December 2004.
-
- [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform
- Resource Identifier (URI): Generic Syntax", STD 66,
- RFC 3986, January 2005.
-
- [RFC4122] Leach, P., Mealling, M., and R. Salz, "A Universally
- Unique IDentifier (UUID) URN Namespace", RFC 4122,
- July 2005.
-
- [RFC4288] Freed, N. and J. Klensin, "Media Type Specifications and
- Registration Procedures", BCP 13, RFC 4288, December 2005.
-
- [RFC5234] Crocker, D. and P. Overell, "Augmented BNF for Syntax
- Specifications: ABNF", STD 68, RFC 5234, January 2008.
-
- [RFC5322] Resnick, P., Ed., "Internet Message Format", RFC 5322,
- October 2008.
-
- [RFC5545] Desruisseaux, B., "Internet Calendaring and Scheduling
- Core Object Specification (iCalendar)", RFC 5545,
- September 2009.
-
- [RFC5546] Daboo, C., "iCalendar Transport-Independent
- Interoperability Protocol (iTIP)", RFC 5546,
- December 2009.
-
- [RFC5646] Phillips, A. and M. Davis, "Tags for Identifying
- Languages", BCP 47, RFC 5646, September 2009.
-
-
-
-
-Perreault Standards Track [Page 70]
-
-RFC 6350 vCard August 2011
-
-
- [RFC5870] Mayrhofer, A. and C. Spanring, "A Uniform Resource
- Identifier for Geographic Locations ('geo' URI)",
- RFC 5870, June 2010.
-
- [RFC6351] Perreault, S., "xCard: vCard XML Representation",
- RFC 6351, August 2011.
-
- [W3C.REC-xml-20081126]
- Maler, E., Yergeau, F., Sperberg-McQueen, C., Paoli, J.,
- and T. Bray, "Extensible Markup Language (XML) 1.0 (Fifth
- Edition)", World Wide Web Consortium Recommendation REC-
- xml-20081126, November 2008,
- .
-
- [xfn] Celik, T., Mullenweg, M., and E. Meyer, "XFN 1.1 profile",
- .
-
-12.2. Informative References
-
- [IANA-TZ] Lear, E. and P. Eggert, "IANA Procedures for Maintaining
- the Timezone Database", Work in Progress, May 2011.
-
- [ISO9070] International Organization for Standardization,
- "Information Processing - SGML support facilities -
- Registration Procedures for Public Text Owner
- Identifiers", ISO 9070, April 1991.
-
- [RFC1738] Berners-Lee, T., Masinter, L., and M. McCahill, "Uniform
- Resource Locators (URL)", RFC 1738, December 1994.
-
- [RFC2397] Masinter, L., "The "data" URL scheme", RFC 2397,
- August 1998.
-
- [RFC2425] Howes, T., Smith, M., and F. Dawson, "A MIME Content-Type
- for Directory Information", RFC 2425, September 1998.
-
- [RFC2426] Dawson, F. and T. Howes, "vCard MIME Directory Profile",
- RFC 2426, September 1998.
-
- [RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk, H.,
- Masinter, L., Leach, P., and T. Berners-Lee, "Hypertext
- Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999.
-
- [RFC3282] Alvestrand, H., "Content Language Headers", RFC 3282,
- May 2002.
-
-
-
-
-
-
-Perreault Standards Track [Page 71]
-
-RFC 6350 vCard August 2011
-
-
- [RFC3406] Daigle, L., van Gulik, D., Iannella, R., and P. Faltstrom,
- "Uniform Resource Names (URN) Namespace Definition
- Mechanisms", BCP 66, RFC 3406, October 2002.
-
- [RFC3536] Hoffman, P., "Terminology Used in Internationalization in
- the IETF", RFC 3536, May 2003.
-
- [RFC4770] Jennings, C. and J. Reschke, Ed., "vCard Extensions for
- Instant Messaging (IM)", RFC 4770, January 2007.
-
- [RFC4880] Callas, J., Donnerhacke, L., Finney, H., Shaw, D., and R.
- Thayer, "OpenPGP Message Format", RFC 4880, November 2007.
-
- [RFC5335bis]
- Yang, A. and S. Steele, "Internationalized Email Headers",
- Work in Progress, July 2011.
-
- [RFC5751] Ramsdell, B. and S. Turner, "Secure/Multipurpose Internet
- Mail Extensions (S/MIME) Version 3.2 Message
- Specification", RFC 5751, January 2010.
-
- [RFC6068] Duerst, M., Masinter, L., and J. Zawinski, "The 'mailto'
- URI Scheme", RFC 6068, October 2010.
-
- [TZ-DB] Olson, A., "Time zone code and data",
- .
-
- [vCard21] Internet Mail Consortium, "vCard - The Electronic Business
- Card Version 2.1", September 1996.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Perreault Standards Track [Page 72]
-
-RFC 6350 vCard August 2011
-
-
-Appendix A. Differences from RFCs 2425 and 2426
-
- This appendix contains a high-level overview of the major changes
- that have been made in the vCard specification from RFCs 2425 and
- 2426. It is incomplete, as it only lists the most important changes.
-
-A.1. New Structure
-
- o [RFC2425] and [RFC2426] have been merged.
-
- o vCard is now not only a MIME type but a stand-alone format.
-
- o A proper MIME type registration form has been included.
-
- o UTF-8 is now the only possible character set.
-
- o New vCard elements can be registered from IANA.
-
-A.2. Removed Features
-
- o The CONTEXT and CHARSET parameters are no more.
-
- o The NAME, MAILER, LABEL, and CLASS properties are no more.
-
- o The "intl", "dom", "postal", and "parcel" TYPE parameter values
- for the ADR property have been removed.
-
- o In-line vCards (such as the value of the AGENT property) are no
- longer supported.
-
-A.3. New Properties and Parameters
-
- o The KIND, GENDER, LANG, ANNIVERSARY, XML, and CLIENTPIDMAP
- properties have been added.
-
- o [RFC2739], which defines the FBURL, CALADRURI, CAPURI, and CALURI
- properties, has been merged in.
-
- o [RFC4770], which defines the IMPP property, has been merged in.
-
- o The "work" and "home" TYPE parameter values are now applicable to
- many more properties.
-
- o The "pref" value of the TYPE parameter is now a parameter of its
- own, with a positive integer value indicating the level of
- preference.
-
- o The ALTID and PID parameters have been added.
-
-
-
-Perreault Standards Track [Page 73]
-
-RFC 6350 vCard August 2011
-
-
- o The MEDIATYPE parameter has been added and replaces the TYPE
- parameter when it was used for indicating the media type of the
- property's content.
-
-Author's Address
-
- Simon Perreault
- Viagenie
- 2875 Laurier, suite D2-630
- Quebec, QC G1V 2M2
- Canada
-
- Phone: +1 418 656 9254
- EMail: simon.perreault@viagenie.ca
- URI: http://www.viagenie.ca
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Perreault Standards Track [Page 74]
-
diff --git a/specifications/contacts/rfc9553.pdf b/specifications/contacts/rfc9553.pdf
deleted file mode 100644
index d58949d8..00000000
--- a/specifications/contacts/rfc9553.pdf
+++ /dev/null
@@ -1,17115 +0,0 @@
-%PDF-1.7
%âãÏÓ
-3 0 obj
-<>/EmbeddedFiles 1639 0 R>>/Outlines 1788 0 R/OutputIntents 1789 0 R/Pages 1 0 R/Type/Catalog>>
-endobj
-1637 0 obj
-<>stream
-
-
-
-
- application/pdf
-
-
- Robert Stepanek, Mario Loffredo
-
-
-
-
-
This specification defines a data model and JavaScript Object Notation (JSON) representation of contact card
information that can be used for data storage and exchange in address book or directory applications. It aims to
be an alternative to the vCard data format and to be unambiguous, extendable, and simple to process. In contrast
to the JSON-based jCard format, it is not a direct mapping from the vCard data model and expands semantics where
appropriate. Two additional specifications define new vCard elements and how to convert between JSContact and
vCard.
-
-
-
-
- RFC 9553: JSContact: A JSON Representation of Contact Data
-
-
- xml2rfc 3.21.0
- 2024-05-07T07:30:35-07:00
- 2024-05-07T07:30:31-07:00
- 2024-05-07T07:30:35-07:00
- WeasyPrint 56.1
- uuid:add3157a-b9ce-11b2-0a00-000000000000
- uuid:adda0949-b9ce-11b2-0a00-690800000000
- default
- 1
-
-
-
- converted
- uuid:add3157e-b9ce-11b2-0a00-810700000000
- converted to PDF/A-3u
- pdfaPilot
- 2024-05-07T07:30:35-07:00
-
-
-
- 3
- U
-
-
-
- http://ns.adobe.com/pdf/1.3/
- pdf
- Adobe PDF Schema
-
-
-
- internal
- A name object indicating whether the document has been modified to include trapping information
- Trapped
- Text
-
-
-
-
-
- http://ns.adobe.com/xap/1.0/mm/
- xmpMM
- XMP Media Management Schema
-
-
-
- internal
- UUID based identifier for specific incarnation of a document
- InstanceID
- URI
-
-
- internal
- The common identifier for all versions and renditions of a document.
- OriginalDocumentID
- URI
-
-
-
-
-
- http://www.aiim.org/pdfa/ns/id/
- pdfaid
- PDF/A ID Schema
-
-
-
- internal
- Part of PDF/A standard
- part
- Integer
-
-
- internal
- Amendment of PDF/A standard
- amd
- Text
-
-
- internal
- Conformance level of PDF/A standard
- conformance
- Text
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-endstream
-endobj
-1788 0 obj
-<>
-endobj
-1789 0 obj
-[1792 0 R]
-endobj
-1 0 obj
-<>
-endobj
-6 0 obj
-<>
-endobj
-14 0 obj
-<>
-endobj
-95 0 obj
-<>
-endobj
-187 0 obj
-<>
-endobj
-276 0 obj
-<>
-endobj
-338 0 obj
-<>
-endobj
-358 0 obj
-<>
-endobj
-376 0 obj
-<>
-endobj
-385 0 obj
-<>
-endobj
-397 0 obj
-<>
-endobj
-408 0 obj
-<>
-endobj
-428 0 obj
-<>
-endobj
-453 0 obj
-<>
-endobj
-470 0 obj
-<>
-endobj
-491 0 obj
-<>
-endobj
-513 0 obj
-<>
-endobj
-529 0 obj
-<>
-endobj
-551 0 obj
-<>
-endobj
-570 0 obj
-<>
-endobj
-585 0 obj
-<>
-endobj
-601 0 obj
-<>
-endobj
-616 0 obj
-<>
-endobj
-629 0 obj
-<>
-endobj
-642 0 obj
-<>
-endobj
-651 0 obj
-<>
-endobj
-659 0 obj
-<>
-endobj
-670 0 obj
-<>
-endobj
-677 0 obj
-<>
-endobj
-687 0 obj
-<>
-endobj
-699 0 obj
-<>
-endobj
-710 0 obj
-<>
-endobj
-726 0 obj
-<>
-endobj
-740 0 obj
-<>
-endobj
-752 0 obj
-<>
-endobj
-769 0 obj
-<>
-endobj
-780 0 obj
-<>
-endobj
-792 0 obj
-<>
-endobj
-799 0 obj
-<>
-endobj
-804 0 obj
-<>
-endobj
-814 0 obj
-<>
-endobj
-826 0 obj
-<>
-endobj
-840 0 obj
-<>
-endobj
-855 0 obj
-<>
-endobj
-861 0 obj
-<>
-endobj
-871 0 obj
-<>
-endobj
-880 0 obj
-<>
-endobj
-890 0 obj
-<>
-endobj
-899 0 obj
-<>
-endobj
-912 0 obj
-<>
-endobj
-926 0 obj
-<>
-endobj
-936 0 obj
-<>
-endobj
-952 0 obj
-<>
-endobj
-960 0 obj
-<>
-endobj
-1021 0 obj
-<>
-endobj
-1055 0 obj
-<>
-endobj
-1100 0 obj
-<>
-endobj
-1141 0 obj
-<>
-endobj
-1173 0 obj
-<>
-endobj
-1189 0 obj
-<>
-endobj
-1215 0 obj
-<>
-endobj
-1235 0 obj
-<>
-endobj
-1246 0 obj
-<>
-endobj
-1267 0 obj
-<>
-endobj
-1289 0 obj
-<>
-endobj
-1313 0 obj
-<>
-endobj
-1334 0 obj
-<>
-endobj
-1357 0 obj
-<>
-endobj
-1376 0 obj
-<>
-endobj
-1400 0 obj
-<>
-endobj
-1414 0 obj
-<>
-endobj
-1432 0 obj
-<>
-endobj
-1454 0 obj
-<>
-endobj
-1476 0 obj
-<>
-endobj
-1865 0 obj
-<>stream
-xœÍ[[sÛÆÞŽûÀ>Ô²åXuì);õMN¼ÞûÅN*K²ÌZ—J¢b3m§Ê‹™¤}ìCz¿³ i$…Lc˜¤@,p¾=—oÏÙ]ŽäHàxNÁHBôÎŒþñqøã{›.Î?Ó—?qæÝÈͽ>øQð–#¢±£Ÿþ9œÊ?}?|ñ7ÉÅèû
é~·H©·2ºî¹žâÀ£e˜·€”I”}˜‰üPºNç“gÆÃ¨ø¿,¯dñàÒe¿tùúYN´j~=ÁZ:ÿPœË¥óåû–¾ÿ™á~:¸ÔôoTý\ùÍùpa{)ñdcŒ
#)W:*üyþqøâÏ'§oOŽF¸žž …´£óëáû§ì̲é.{Ìî³»xÝgÚýîühøê|fËn(¬åÒKkb>Šw{E¡”€.œ³¦Š~QË!Ë·±Èû-»Ó
--¹Ó1:7ÒVp¨"8Õˆ"°GlÌžàÕ@ðc7̲ePm)ç¹Õ:W”·‡ï^¿úfœÛc§ì€
’àÅ£´W\¨®<
-·ü¦ÚØ
-ÁƒóAËœÆ6€"Ùª¹±S@¬L^c&Zï